gpt4 book ai didi

javascript - 比较 2 个嵌套数组以返回重复数组

转载 作者:行者123 更新时间:2023-11-28 17:13:11 25 4
gpt4 key购买 nike

我有以下代码,不适用于嵌套数组(但它适用于简单数组):

var array1 = [["501", 1800, "floorsRegion1", 0], ["502", 1800, "floorsRegion1", 0], ["503", 1800, "floorsRegion1", 0]];
var array2 = [["501", 1800, "floorsRegion1", 0]];

var duplicatesArray = array1.filter(function(val) {
return array2.indexOf(val) !== -1;
});
console.log(duplicatesArray); // should return [["501", 1800, "floorsRegion1", 0]]; but it doesn't currently

如果我有简单的数字或字符串而不是嵌套数组,那么它会起作用,并且“duplicatesArray”将包含重复项。但 JS 不会将整个数组作为值进行比较,所以我的代码不起作用。

只有 val[0] 是在这些嵌套数组中进行比较所必需的,但结果数组必须包含整个嵌套数组才能重复。

我发现了几个类似的解决方案,但它们删除了重复项,而不是返回包含这些重复项的数组。

最佳答案

如果您只关心索引 0 处的项目,那么您可以使用 some 进行过滤并检查 id array2 中的某个项目,它的第一个值等于当前项目是过滤器:

var array1 = [["501", 1800, "floorsRegion1", 0], ["502", 1800, "floorsRegion1", 0], ["503", 1800, "floorsRegion1", 0]];
var array2 = [["501", 1800, "floorsRegion1", 0]];

let filtered = array1.filter(arr => array2.some(arr2 => arr2[0] == arr[0]))
console.log(filtered)


// with two items in array2:

array1 = [["501", 1800, "floorsRegion1", 0], ["502", 1800, "floorsRegion1", 0], ["503", 1800, "floorsRegion1", 0]];
array2 = [["501", 1800, "floorsRegion1", 0], ["503", 1800, "floorsRegion1", 0]];

filtered = array1.filter(arr => array2.some(arr2 => arr2[0] == arr[0]))
console.log(filtered)

这不是很有效,因为它看起来认为 array2 代表 array1 中的每个项目。如果数组很大,则值得使用允许更快查找的对象或 Set 进行查找。像这样的东西:

var array1 = [["501", 1800, "floorsRegion1", 0], ["502", 1800, "floorsRegion1", 0], ["503", 1800, "floorsRegion1", 0]];
var array2 = [["501", 1800, "floorsRegion1", 0], ["503", 1800, "floorsRegion1", 0]];

let known = new Set(array2.map(item => item[0]))

let filtered = array1.filter(arr => known.has(arr[0]))
console.log(filtered)

关于javascript - 比较 2 个嵌套数组以返回重复数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54031671/

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