如何从二维数组中删除重复项? [关闭]
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]]
【讨论】:
以上是关于如何从二维数组中删除重复项? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章