从另一个多维数组中删除一个多维数组中的元素

时间:2013-07-11 20:39:31

标签: javascript arrays 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:等等,不,忽略它,我是愚蠢的。

3 个答案:

答案 0 :(得分:1)

假设数组中总是有两个元素,而“unique”元素被定义为名称​​和的组合,你可以这样做:

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;
}

答案 1 :(得分:0)

如果你需要快速拼凑一些东西,那么使用嵌套循环遍历Arr2中Arr1中每个元素的元素,并对每个元素进行比较。您可以查看此问题的答案,以获得有关比较内部数组的提示:

How to check if two arrays are equal with JavaScript?

答案 2 :(得分:0)

因为它是所有字符串,所以您可以通过字符串方法和链接获得创意。可能不是最好的表现而且有点棘手,但它确实有效:

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。在任何情况下,我都不建议将其用于制作,只是为了好玩。

演示: http://jsbin.com/obokuy/1/edit