如何比较节点js中的两个数组?

gau*_*uti 8 javascript node.js

我有两个数组,我如何比较单发的两个数组.

   var arr1= ["a","b","c"];
   var arr2 = ["a","c","d"]

   if(arr1 == arr2){
      console.log(true);
    }else{
      console.log(false);
    }
Run Code Online (Sandbox Code Playgroud)

Nat*_*all 15

var arr1 = ["a","b","c"];
var arr2 = ["a","c","d"];

if (arr1.length == arr2.length
    && arr1.every(function(u, i) {
        return u === arr2[i];
    })
) {
   console.log(true);
} else {
   console.log(false);
}
Run Code Online (Sandbox Code Playgroud)

边缘情况的旁注:

===对于这种任务,通常会被认为有点破碎,因为NaN行为意外:

var arr1 = ["a",NaN,"b"];
var arr2 = ["a",NaN,"b"];

if (arr1.length == arr2.length
    && arr1.every(function(u, i) {
        return u === arr2[i];
    })
) {
   console.log(true);
} else {
   console.log(false);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码实际上是false因为NaN !== NaN.此外,===不能区分+0-0.为了涵盖这两种情况,您可以使用更强大的比较,称为"egal"或"is",这可以很容易地实现,如下所示:

function is(a, b) {
    return a === b && (a !== 0 || 1 / a === 1 / b) // false for +0 vs -0
        || a !== a && b !== b; // true for NaN vs NaN
}

var arr1 = ["a",NaN,"b"];
var arr2 = ["a",NaN,"b"];

if (arr1.length == arr2.length
    && arr1.every(function(u, i) {
        // Use "is" instead of "==="
        return is(u, arr2[i]);
    })
) {
   console.log(true);
} else {
   console.log(false);
}
Run Code Online (Sandbox Code Playgroud)


sta*_*er2 7

我会为此使用下划线.

var same = (_.difference(arr1, arr2).length == 0)
Run Code Online (Sandbox Code Playgroud)

  • 这是不正确的.`_ = require('下划线'); _.difference(["a","c"],["a","c","d"]).length;`returns:`0`与`lodash`相同. (4认同)

Tai*_*Hah 5

[ES6]

最佳答案是足够的。

但是,当您只想比较其值时,必须先对其进行排序。这里不需要排序代码。

if(arr1.length == arr2.length && arr1.every((v) => arr2.indexOf(v) >= 0)) {
    console.log(true);
} else {
    console.log(false);
}
Run Code Online (Sandbox Code Playgroud)

我认为使用“一些”而不是“每个”会更好。

如果不一样,“一些”可以让您提前退出。-很少但很早;)

if(arr1.length == arr2.length && !arr1.some((v) => arr2.indexOf(v) < 0)) {
    console.log(true);
} else {
    console.log(false);
}
Run Code Online (Sandbox Code Playgroud)