gpt4 book ai didi

javascript - 删除两个数组之间的非公共(public)项javascript

转载 作者:行者123 更新时间:2023-12-02 14:46:15 25 4
gpt4 key购买 nike

我有一个函数可以删除javascript中两个数组之间的非公共(public)元素,但问题是我的代码减少了数组中的一些项目并增加了一些。下面是我的代码

function canFormPairs(cleanSocks, dirtySocks) {
let compared = [];
cleanSocks.forEach(item => {
dirtySocks.forEach(dItem => {
if (item == dItem) {
compared.push(item);
}
});
});
return compared;
}
console.log(canFormPairs([1, 5, 6, 7, 5, 6, 5, 56], [1, 5, 6, 7, 8, 5, 6, 7, 8, 78]));

上面的代码给出

[ 1, 5, 5, 6, 6, 7, 7, 5, 5, 6, 6, 5, 5 ]

而不是想要的结果

[1, 1, 5, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7]

排序时

请问这段代码有什么问题

最佳答案

您当前的逻辑会为两个数组之间的每个唯一索引匹配推送项目。例如,对于 7,7 在索引 3(第一个数组)和索引 3(第二个数组)处匹配,因此它被推送一次。然后,下一个匹配是索引 3(第一个数组)和索引 7(第二个数组)。除了 3-33-7 之外,没有更多索引匹配,因此只有两个 7 (值)被推。

我会考虑从两个数组创建一个Set,然后组合两个数组并使用.filter删除不在两个集合中的元素,然后对数组进行排序:

function canFormPairs(a, b) {
const setA = new Set(a);
const setB = new Set(b);
return [...a, ...b]
.filter(item => setA.has(item) && setB.has(item))
.sort((a, b) => a - b);
}
console.log(canFormPairs([1, 5, 6, 7, 5, 6, 5, 56], [1, 5, 6, 7, 8, 5, 6, 7, 8, 78]));

关于javascript - 删除两个数组之间的非公共(public)项javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54803512/

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