假设有一个数组,其中包含多个子数组,如何高效地识别重复元素?
var array = [
[
11.31866455078125,
44.53836644772605
],
[ // <-- Here's the duplicate
11.31866455078125,
44.53836644772605
],
[
11.371536254882812,
44.53836644772605
],
[
11.371536254882812,
44.50140292110874
]
]
我一直在使用已经被接受的依赖项
lodash
进行相关的 IT 技术工作,并且我知道如何仅使用 _.uniqWith
和 _.isEqual
来返回“唯一”列表:_.uniqWith(array,_.isEqual)
这将给出“唯一”的列表版本:
[
[ 11.31866455078125, 44.53836644772605 ],
[ 11.371536254882812, 44.53836644772605 ],
[ 11.371536254882812, 44.50140292110874 ]
]
不仅要报告唯一元素,我需要的是重复元素,最好是第一个出现的索引。
这个问题是否已经被lodash
库中的某些方法涵盖?或者说我必须写循环来比较元素?
如果有适合的库方法,我会尽量避免重写函数,所以我基本上陷入了困境:
只返回重复项或至少与“唯一列表”的比较差异。
基本上确定数组中数组的“索引”。虽然一旦确定了重复项,可以使用
_.isEqual
进行过滤缩减。
也尝试避免创建对象哈希/映射并在此处计算键的发生次数,或者至少不作为单独的对象,而是作为可以“内联”功能化的东西。
.slice()
来不断扩展列表感到非常满意,但它确实比仅使用索引循环更加简洁。正在考虑中。 - Neil Lunn_.findIndex(collection.slice(0, index), equal) !== -1;
可以简化为手动的findIndex
,只需迭代一次即可。但当前的方法是紧凑的。 - Dmitri Pavlutin