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)
我会为此使用下划线.
var same = (_.difference(arr1, arr2).length == 0)
Run Code Online (Sandbox Code Playgroud)
[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)