gpt4 book ai didi

javascript - 比较多个数组中的值

转载 作者:行者123 更新时间:2023-12-02 16:28:52 24 4
gpt4 key购买 nike

我有两个数组,我需要比较值并获取重复项。我编写了大部分代码,但似乎对比较感到困惑。

这是我的代码:

function compare(arr1, arr2) {
for (var i = 0; i< arr1.length; i++) {
for (var j = 0; j < arr2.length; j++) {
if (arr1[i] == arr2[j]) {
console.log[i];
}
}
}
}

compare([5, 3, 2, 5, 1, 6], [6, 4, 2, 7, 10]);

我使用 for 循环来打印所有数字,但由于某种原因,if 语句比较不起作用。关于比较数组中的值,有什么我不明白的吗?

我不是在寻找直接的答案,而是在寻找可能的指导。

最佳答案

您的代码在时间上是二次方的,因为它为第一个数组中的每个项目迭代第二个数组。线性时间解决方案是将第一个数组转换为哈希表,然后对于第二个数组中的每个项目,立即检查它是否在哈希中。

function intersect(a, b) {
var hash = {};
a.forEach(function(x) { hash[x] = 1 });

return b.filter(function(x) { return hash[x] === 1 });
}

c = intersect([5, 3, 2, 5, 1, 6], [6, 4, 2, 7, 10]);
document.write(c)

但是请注意,这仅在要比较的项目是基元的情况下才有效,您不能将对象放入哈希中,因此代码必须是二次的:

function intersect(a, b) {
return a.filter(function(x) {
return b.indexOf(x) >= 0
});
}

a = {x:'a'};
b = {x:'b'};
c = {x:'c'};
d = {x:'d'};

i = intersect([a,b,c], [a,b,d]);

document.write(JSON.stringify(i));

关于改进当前代码,我建议您使 JavaScript 更加惯用,特别是,

  • 习惯迭代方法而不是 for 循环
  • 检查内置函数的全部内容并尽可能使用它们
  • 并且,为了理智起见,永远不要使用 ==

关于javascript - 比较多个数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28484035/

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