gpt4 book ai didi

javascript - 在数组中查找重复数组

转载 作者:数据小太阳 更新时间:2023-10-29 05:54:14 24 4
gpt4 key购买 nike

给定一组数组,识别重复项的有效方法是什么?

var array = [
[
11.31866455078125,
44.53836644772605
],
[ // <-- Here's the duplicate
11.31866455078125,
44.53836644772605
],
[
11.371536254882812,
44.53836644772605
],
[
11.371536254882812,
44.50140292110874
]
]

我一直在用 lodash 研究这个作为接受的依赖项,我知道如何使用 _.uniqWith 返回“唯一”列表和 _.isEqual :

_.uniqWith(array,_.isEqual)

With 会给出列表的“唯一”版本:

[ 
[ 11.31866455078125, 44.53836644772605 ],
[ 11.371536254882812, 44.53836644772605 ],
[ 11.371536254882812, 44.50140292110874 ]
]

但我不仅需要报告唯一元素,还需要重复的元素,最好是第一次出现的索引。

lodash 库中是否真的包含了我所缺少的一些方法组合?还是我将不得不忍受编写循环来比较元素。

可能只是对此感到过度疲劳,所以欢迎对这个问题有新的看法。

如果有适合的库方法,尽量不重写函数,所以我基本上坚持:

  1. 仅返回重复项或至少与“唯一列表”的比较差异。

  2. 基本上识别数组中数组的“索引”。虽然我想这可能是 _.isEqual 的过滤器减少一旦识别出重复项。

还尝试避免创建对象 Hash/Map 并在此处计算键的出现次数,或者至少不作为单独的对象,而是作为可以在功能上“内联”完成的事情。

最佳答案

Lodash 提供了很多有用的函数来实现查找第一个重复索引。
使用 _.findIndex()_.isEqual()以下代码将找到第一个重复索引:

var duplicateIndex = _.findIndex(array, function(value, index, collection) {
var equal = _.isEqual.bind(undefined, value);
return _.findIndex(collection.slice(0, index), equal) !== -1;
});

或更快但更冗长:

var duplicateIndex = _.findIndex(array, function(value, index, collection) {
var equal = _.isEqual.bind(undefined, value);
return _.findIndex(collection, function(val, ind) {
return ind < index && equal(val);
}) !== -1;
});

请注意,如果不存在重复项,将返回 -1
简而言之,该算法遍历数组并回头查看当前元素是否不存在。如果是,则返回当前迭代索引。
请检查工作demo .

关于javascript - 在数组中查找重复数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36784726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com