gpt4 book ai didi

javascript - 查找两个数组是否在数组中重复,然后选择它们

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

我在主/父数组中有多个数组,如下所示:

var array = [[1, 17], [1, 17], [1, 17], [2, 12], [5, 9], [2, 12], [6, 2], [2, 12]];

为了便于阅读,这里是数组:

[1, 17]
[1, 17]
[1, 17]
[2, 12]
[5, 9]
[2, 12]
[6, 2]
[2, 12]
[2, 12]

我想选择重复 3 次或更多次 (> 3) 的数组并将其分配给一个变量。因此,在此示例中,var repeatedArrays 将是 [1, 17][2, 12]

所以这应该是最终结果:

console.log(repeatedArrays);
>>> [[1, 17], [2, 12]]

我发现了类似的东西 here但它使用 underscore.js 和 lodash。

我怎么能用 javascript 甚至 jquery(如果需要的话)呢?

最佳答案

试试这个

array.filter(( r={}, a=>!(2-(r[a]=++r[a]|0)) ))

var array = [[1, 17], [1, 17], [1, 17], [2, 12], [5, 9], [2, 12], [6, 2], [2, 12]];

var r= array.filter(( r={}, a=>!(2-(r[a]=++r[a]|0)) ))

console.log(JSON.stringify(r));

时间复杂度 O(n)(一个数组通过过滤器函数)。灵感来自 Nitish回答。

解释

(r={}, a=>...) 将返回逗号后的最后一个表达式(即 a=>...)(例如 (5,6)==6)。在 r={} 中,我们设置了一个临时对象,我们将在其中存储唯一键。在过滤器函数 a=>... 中,在 a 中我们有当前的 array 元素。在 r[a] 中,JS 隐式地将 a 转换为字符串(例如 1,17)。然后在 !(2-(r[a]=++r[a]|0)) 中,我们增加出现元素 a 的计数器并返回 true(作为过滤器函数value) 如果元素 a 出现了 3 次。如果 r[a] 未定义,则 ++r[a] 返回 NaN,并且 NaN|0=0(也 number|0=number)。 r[a]= 初始化第一个计数器值,如果我们省略它,++ 只会将 NaN 设置为 r[a ] 是不可递增的(因此我们需要在 init 处置零)。如果我们删除 2- 作为结果,我们得到没有重复的输入数组 - 或者我们也可以通过 a=>!(r[a]=a in r) .如果我们将 2- 更改为 1-,我们将得到仅包含重复项的数组 .

更新

基于 @ken 的更短版本comment可以写(它应该总是与数字数组一起工作)。 @ken 代码的原始较长版本在片段中并显示了如何 @ken以巧妙的方式使用 .filter 的第二个参数来避免使用全局变量 r

array.filter(a=>!(2-(this[a]=++this[a]|0)))

var array = [[1, 17], [1, 17], [1, 17], [2, 12], [5, 9], [2, 12], [6, 2], [2, 12]];

var r= array.filter(a=>!(2-(this[a]=++this[a]|0)), {})

console.log(JSON.stringify(r));

关于javascript - 查找两个数组是否在数组中重复,然后选择它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53452875/

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