javascript - 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 年)错过了一些非常明显的东西。
解决方案
您可以使用一堆闭包并检查 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);
推荐阅读
- javascript - 计算给定长度范围的单词
- string - 如何修改 AnsiStrPos 函数以返回整数偏移量?(德尔福 7)
- android - 可点击 RecyclerView 中的项目
- python - 从 json 中删除重复项
- asp.net - 为每个用户使用相同的会话 ID?
- c++ - AVX2 - 方法比经典版本慢 14 倍
- ionic-framework - livereload 不提供地址选择
- c++ - 我应该如何在文本 RPG 中调用玩家咒语?
- python - Python 代码不工作:TypeError,'int' object is not callable
- php - 我可以在不重复自己的情况下执行 SELECT 查询吗?