检查两个数组之间的相等性

时间:2016-09-15 17:47:40

标签: javascript arrays

如何在不使用外部库(最好使用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;
}

2 个答案:

答案 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));