我有两个数组:一个填充来自ajax请求的信息,另一个存储用户单击的按钮。我使用以下代码(我填充了示例数字):
var array1 = [2, 4];
var array2 = [4, 2]; //It cames from the user button clicks, so it might be disordered.
array1.sort(); //Sorts both Ajax and user info.
array2.sort();
if (array1==array2) {
doSomething();
}else{
doAnotherThing();
}
但它始终提供false
,即使两个数组相同,但名称不同。(我在Chrome的JS控制台中进行了检查)。那么,有没有办法知道这两个数组是否包含相同的内容?为什么要给false
?如何知道第一个数组中的哪些值不在第二个数组中?
发布于 2017-04-19 01:17:20
对数组进行排序,并逐个比较它们的值。
function arrayCompare(_arr1, _arr2) {
if (
!Array.isArray(_arr1)
|| !Array.isArray(_arr2)
|| _arr1.length !== _arr2.length
) {
return false;
}
// .concat() to not mutate arguments
const arr1 = _arr1.concat().sort();
const arr2 = _arr2.concat().sort();
for (let i = 0; i < arr1.length; i++) {
if (arr1[i] !== arr2[i]) {
return false;
}
}
return true;
}
发布于 2011-06-04 01:06:55
如果您的数组项不是对象-例如,如果它们是数字或字符串,您可以比较它们连接的字符串,以查看它们是否以任何顺序具有相同的成员-
var array1= [10, 6, 19, 16, 14, 15, 2, 9, 5, 3, 4, 13, 8, 7, 1, 12, 18, 11, 20, 17];
var array2= [12, 18, 20, 11, 19, 14, 6, 7, 8, 16, 9, 3, 1, 13, 5, 4, 15, 10, 2, 17];
if(array1.sort().join(',')=== array2.sort().join(',')){
alert('same members');
}
else alert('not a match');
发布于 2015-01-07 18:25:32
https://stackoverflow.com/questions/6229197
复制相似问题