LDJ*_*LDJ 15 javascript arrays
我有两个包含数值的整数数组.我想查看两个列表并检查列表之间的共性(或缺少).即我想迭代数组并找到出现在两个列表中的那些项目,而在一个单独的函数中,我想通过数组并找到第一个而不是第二个中的项目.
这样做的显而易见的方法是嵌套for循环:
var containedInFirst = false;
for (var primaryID = 0; primaryID < PrimaryArray.length; primaryID++) {
containedInFirst = false;
for (var secondaryID = 0; secondaryID < SecondaryArray.length; secondaryID++) {
if (PrimaryArray [primaryID] === SecondaryArray[secondaryID]) {
containedInFirst = true;
break;
}
}
//Do some more stuff based on the value of containedInFirst here
}
Run Code Online (Sandbox Code Playgroud)
但鉴于这些列表可能包含数百或数千条记录,这相当于一点点迭代和处理器密集.因此,我想知道是否有更有效的方法来执行上述代码?不仅仅是实际的搜索,还有比Integer数组更有效的东西作为值的容器,或者只是不使用嵌套的for循环来遍历和比较内容.
对更有效或更优雅的解决方案的想法?
Tim*_*rez 37
每个人都过于复杂.这是一个班轮:
var isEqual = (JSON.stringify(arr1.sort()) === JSON.stringify(arr2.sort()));
Run Code Online (Sandbox Code Playgroud)
Mar*_*tos 14
首先对它们进行排序,然后并行地将它们淹没.
a.sort();
b.sort();
left = []; both = []; right = [];
i = 0; j = 0;
while (i < a.length && j < b.length) {
if (a[i] < b[j]) {
left.push(a[i]);
++i;
} else if (b[j] < a[i]) {
right.push(b[j]);
++j;
} else {
both.push(a[i]);
++i; ++j;
}
}
while (i < a.length) {
left.push(a[i]);
++i;
}
while (j < b.length) {
right.push(b[j]);
++j;
}
Run Code Online (Sandbox Code Playgroud)