我有一个数组:[[1,3],[2,5],[1,3],[2,5]]
我想删除任何重复的子数组。我尝试使用此代码:
uniqueArray = array.filter(function(item, pos) {
return array.indexOf(item) == pos; });
对于所有情况,它仍然返回true。
我可以使用哪个功能来获得所需的结果。
答案 0 :(得分:2)
您可以将Array#filter与一个将为每个迭代元组存储哈希的对象一起使用:
var arr = [[1,3],[2,5],[1,3],[2,5]];
var result = arr.filter(function(t) {
var key = t.join('-');
return this[key] ? false : (this[key] = true);
}, Object.create(null));
console.log(result);

答案 1 :(得分:2)
将2D数组转换为带有字符串化元素的1D数组
然后将其放入The 'fields' parameter is required for this method.
以自动过滤掉重复元素
现在将Set转换回数组并通过JSON解析每个元素来映射数组以恢复数组。
可读且没有嵌套循环。
Set

答案 2 :(得分:1)
不是最有效的方法,但子数组可以用作对象键:
a = [[1,3],[2,5],[1,3],[2,5]]
o = a.reduce((r, v) => (r[v] = v, r), {})
console.log(JSON.stringify( Object.values(o) ))
console.log(JSON.stringify( o ))

更新:使用数字键似乎更快一点:
let a = [[1,3],[2,5],[1,3],[2,5]], t, b, n = _ => performance.now(),
v = Object.values, l = t => console.log(JSON.stringify(b), t)
t = n(); b = v(a.reduce((r, v) => (r[v] = v, r), {})) ; l(n() - t)
t = n(); b = v(a.reduce((r, v) => (r[v[0] + 1 / v[1]] = v, r), {})) ; l(n() - t)
t = n(); b = v(a.reduce((r, v) => (r[v[0] + 1 / v[1]] = v, r), new Map)); l(n() - t)