删除重复的子数组

时间:2017-11-13 00:01:33

标签: javascript arrays

我有一个数组:[[1,3],[2,5],[1,3],[2,5]]我想删除任何重复的子数组。我尝试使用此代码:

 uniqueArray = array.filter(function(item, pos) {
   return array.indexOf(item) == pos;   });

对于所有情况,它仍然返回true。

我可以使用哪个功能来获得所需的结果。

3 个答案:

答案 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)