如何从二维数组中删除重复项?

新手上路,请多包涵

我有一个二维数组:

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

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

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

谢谢!

原文由 Michał Kalinowski 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 505
2 个回答
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] 之类的操作可能会更快,但是您将自己限制为只有两个键。

原文由 Stephen 发布,翻译遵循 CC BY-SA 3.0 许可协议

这需要 JavaScript 1.7:

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

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

最短版本归功于 jsN00b。

原文由 Matt 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题