Javascript:有效地比较两个整数数组

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)

  • 这正是我来这里的目的,比较两个是否相等。谢谢! (2认同)

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)