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

我有两个数组,我怎样才能比较两个数组在单一镜头。

var arr1= ["a","b","c"]; var arr2 = ["a","c","d"] if(arr1 == arr2){ console.log(true); }else{ console.log(false); } 

 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); } 

边缘情况的附注:

对于这种types的任务, ===经常被认为是微小的破坏,因为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); } 

上面的代码实际上loggingfalse因为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); } 

我会利用这个下划线 。

 var same = (_.difference(arr1, arr2).length == 0) 

这里是另外一个, every没有ES5:

 function arrEq(arr1, arr2) { for (var i = 0; i < arr1.length; i++) if (arr1[i] != arr2[i]) return false; return i == arr2.length; } 

[ES6]

最佳答案是好的和足够的。

但是,当你只是想比较它的值是相同的,你必须先sorting。 这里不需要sorting代码。

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

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

如果这些不一样,“一些”会让你提前退出。 – 很less,但很早;)

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

我想补充一些“台湾哈”的代码修改,但是不能发表评论(系统告诉我)

所以这里是我的修改:

 function ArrayEquals(arr1,arr2){ return arr1.length === arr2.length && !arr1.some((v) => arr2.indexOf(v) < 0) && !arr2.some((v) => arr1.indexOf(v) < 0); } 

基本上,我不得不检查数组,因为我的数组不包含唯一的数字。