如何从二维数组中删除重复项? [关闭]

Posted

技术标签:

【中文标题】如何从二维数组中删除重复项? [关闭]【英文标题】:How to remove duplicates from a two-dimensional array? [closed] 【发布时间】:2013-12-18 19:41:24 【问题描述】:

我有一个二维数组:

[[7,3], [7,3], [3,8], [7,3], [7,3], [1,2]]

有什么聪明的方法可以从中删除重复的元素吗? 它应该返回这样的数组:

[[7,3], [3,8], [1,2]]

谢谢!

【问题讨论】:

遍历数组中的每个条目,寻找重复项。这是唯一的方法。 顺序重要吗?例如[[7, 3], [3, 7]] 呢?你想把它当作两个不同的元素,还是重复的元素? 这个问题已经过时了。这里有更新的答案:***.com/questions/57562611/… 【参考方案1】:
arr = [[7,3], [7,3], [3,8], [7,3], [7,3], [1,2]];

function multiDimensionalUnique(arr) 
    var uniques = [];
    var itemsFound = ;
    for(var i = 0, l = arr.length; i < l; i++) 
        var stringified = JSON.stringify(arr[i]);
        if(itemsFound[stringified])  continue; 
        uniques.push(arr[i]);
        itemsFound[stringified] = true;
    
    return uniques;


multiDimensionalUnique(arr);

说明:

就像你提到的,另一个问题只涉及一维数组。你可以通过 indexOf 找到它。这很容易。多维数组并不容易,因为 indexOf 不能在里面查找数组。

我能想到的最直接的方法是序列化数组值,并存储它是否已经找到。执行stringified = arr[i][0]+":"+arr[i][1] 之类的操作可能会更快,但是您将自己限制为只有两个键。

【讨论】:

【参考方案2】:
var origin = [[7,3], [7,3], [3,8], [7,3], [7,3], [1,2]];

function arrayEqual(a, b) 
    if (a.length !== b.length)  return false; 
    for (var i = 0; i < a.length; ++i) 
        if (a[i] !== b[i]) 
            return false;
        
    
    return true;


function contains(array, item) 
    for (var i = 0; i < array.length; ++i) 
        if (arrayEqual(array[i], item)) 
            return true;
        
    
    return false;


function normalize(array) 
    var result = [];
    for (var i = 0; i < array.length; ++i) 
        if (!contains(result, array[i])) 
            result.push(array[i]);
        
    
    return result;


var result = normalize(origin);
console.log(result);

http://jsfiddle.net/2UQH6/

【讨论】:

【参考方案3】:

这需要 javascript 1.7:

var arr = [[7,3], [7,3], [3,8], [7,3], [7,3], [1,2]];

arr.map(JSON.stringify).reverse().filter((e, i, a) => a.indexOf(e, i+1) === -1).reverse().map(JSON.parse) // [[7,3], [3,8], [1,2]]

【讨论】:

以上是关于如何从二维数组中删除重复项? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

删除二维数组 Python 的重复项

NodeJS:如何从数组中删除重复项[重复]

如何在不使用 JCL 中的 XSUM 的情况下从输入文件中删除重复项并将重复项写入文件? [关闭]

如何从 C# 数组中删除重复项?

如何从 Perl 中的数组中删除重复项?

从数组中删除重复的对象