首页 > 解决方案 > ES6中过滤Javascript数组中重复项的最优雅方法是什么

问题描述

我已经看到了很多关于这个主题的答案,但我并不完全满意。我最喜欢的片段是这个:

[ ["1", "2"], ["1", "2", "3"], ["1", "2"] ]
  .filter(
    (path: string[], i: number, array: string[][]) => _.findIndex(array, x => _.isEqual(x, path)) === i
  )

这行得通,但我觉得它太冗长了,我不喜欢。难道没有更紧凑的方法来实现这一点吗?即使这意味着使用 lodash 或其他东西。我觉得我在 2019 年(接近 2020 年)错过了一些非常明显的东西。

标签: javascriptecmascript-6lodash

解决方案


您可以使用一堆闭包并检查 aSet和一个字符串化的值。

var array = [["1", "2"], ["1", "2", "3"], ["1", "2"]],
    unique = array.filter(
        (s => a => 
            (j => !s.has(j) && s.add(j))
            (JSON.stringify(a))
        )
        (new Set)    
    );

console.log(unique);


推荐阅读