[英]Trouble removing elements from multidimensional array using for loop (javascript)
[英]Removing the elements from one multidimensional array from another multidimensional array
我发现很难直面我认为很简单的任务。 此刻我的脑袋刚刚炸开,我有最后期限。 :(
我需要从一个多维数组中获取所有元素数组,然后从另一个多维数组中删除它们。
Arr1 = [["Tom", "161"], ["Dick", "29"], ["Harry", "46"], ["Mike", "72"], ["Sally", "11"]];
Arr2 = [["Harry", "46"], ["Mike", "72"], ["Tom", "161"]];
因此,在这种情况下,我想从Arr2中获取所有元素数组,并将其从Arr1中删除,以便随后Arr1看起来像这样:
Arr1 = [["Dick", "29"], ["Sally", "11"]];
那有意义吗?
EDITx2:等一下,不,请忽略我,我很傻。
假设数组中始终有两个元素,并且将“唯一”元素定义为名称和数字的组合,则可以执行以下操作:
function(array1, array2) {
var seen = {};
var returnedArray = [];
for(var i = 0; i < array2.length; i++) {
var elements = array2[i];
seen[elements[0] + elements[1]] = true;
//an alternative to the above is to do
//seen[JSON.stringify(elements)] = true;
}
for(var i = 0; i < array1.length; i++) {
var elements = array1[i];
if(!seen[elements[0] + elements[1]]) {
returnedArray.push(elements);
}
//an alternative to the above is to do
//if(!seen[JSON.stringify(elements)]) {
// ...
//}
//
//if you took the alternate approach in the first loop
}
return returnedArray;
}
如果需要快速组合,请使用嵌套循环对Arr1中的每个元素遍历Arr2的元素,并对每个元素进行比较。 您可以查看此问题的答案,以获取有关比较内部数组的提示:
由于所有的都是字符串,您可以通过字符串方法和链接来发挥创意。 可能不是最好的性能,但有些棘手,但是它可以工作:
var arr = [["Tom", "161"], ["Dick", "29"], ["Harry", "46"], ["Mike", "72"], ["Sally", "11"]];
var remove = [["Harry", "46"], ["Mike", "72"], ["Tom", "161"]];
var result = arr
.join('|')
.replace(RegExp(remove.join('|'),'g'),'')
.match(/[^|]+/g)
.map(function(s){ return s.split(',') });
console.log(result); //=> [["Dick","29"],["Sally","11"]]
您甚至可以尝试使用JSON
。 在任何情况下,我都不会推荐这样做,只是为了好玩。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.