如何在不使用外部库(最好使用ES5)的情况下检查两个数组元素之间的相等性?
我想检查它们之间的相等性,而不关心元素的顺序。因此,在我的情况下,两个数组[1,2,3]
和[2,3,1]
是相同的。
我想我应该写一个函数
function isEqual(arr1, arr2) {
arr1.forEach(el => {
if (arr2.indexOf(el) === -1) {
return false;
}
});
arr2.forEach(el => {
if (arr1.indexOf(el) === -1) {
return false;
}
});
return true;
}
答案 0 :(得分:3)
您可以使用 JSON.stringify
和 Array#sort
方法。在转换为JSON字符串后,对两个数组进行排序,然后对它们进行比较。
function isEqual(arr1, arr2) {
return JSON.stringify(arr1.sort()) === JSON.stringify(arr2.sort());
}
console.log(isEqual([1, 2, 3], [2, 3, 1]));
console.log(isEqual([1, 2, 3], [2, 4, 1]));
console.log(isEqual([1, 2, 3, 3], [2, 3, 1]));
console.log(isEqual([1, 2, 3, 3], [2, 4, 1, 1]));

或者代替 JSON.stringify
,您也可以使用 Array#join
方法(建议 @JonCarter )这使得它变得更加简单。
function isEqual(arr1, arr2) {
return arr1.sort().join() === arr2.sort().join();
}
console.log(isEqual([1, 2, 3], [2, 3, 1]));
console.log(isEqual([1, 2, 3], [2, 4, 1]));
console.log(isEqual([1, 2, 3, 3], [2, 3, 1]));
console.log(isEqual([1, 2, 3, 3], [2, 4, 1, 1]));

答案 1 :(得分:0)
您可以使用Array#every
断言值相等。这是非常基本的,但是使用严格的相等检查有其局限性。但这显示了迭代数组的粗略框架。
注意:由于数组是基于索引的列表,因此假设它们相等,则需要在相同的索引处具有相等的值。
var arr1 = [1,2,3,4];
var arr2 = [1,2,3,4];
var arr3 = [1,2,4];
var arr4 = [1,2,2,4];
function isArrEql(a1, a2) {
return a1.length === a2.length && a1.every(function(v, i) {
return v === a2[i];
});
}
console.log('arr1, arr2: ', isArrEql(arr1, arr2));
console.log('arr1, arr2: ', isArrEql(arr1, arr3));
console.log('arr1, arr2: ', isArrEql(arr1, arr4));