📜  js 数组等于忽略顺序 - Javascript (1)

📅  最后修改于: 2023-12-03 15:17:02.461000             🧑  作者: Mango

JS 数组等于忽略顺序 - Javascript

在 Javascript 中,有时候我们需要判断两个数组是否完全相同,不考虑它们的顺序。这个问题在算法竞赛中非常常见,因此掌握这个知识点对程序员来说是必不可少的。

方法一:sort() + join()

一个常见的方法是将两个数组都按照升序排序,然后使用 join() 方法将它们转换成字符串进行比较。

function isEqual(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }
  arr1.sort();
  arr2.sort();
  return arr1.join() === arr2.join();
}

这个方法的时间复杂度为 O(n log n),因为它要先对数组进行排序。这种方法需要注意的是,如果数组中的元素是对象等引用类型,它们的比较方式可能与预期的不同。

方法二:reduce()

另一个方法是使用 reduce() 方法,它逐一比较两个数组中的元素。

function isEqual(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }
  return arr1.reduce((acc, cur) => {
    return acc && arr2.includes(cur);
  }, true);
}

这个方法的时间复杂度为 O(n^2),因为它需要逐一比较两个数组中的所有元素。但是它对于数组中包含引用类型的情况比较友好,因为它直接使用 === 操作符进行比较。

方法三:Set

如果你使用了 ES6,那么有一个非常简单的方法可以实现数组比较:使用 Set。

function isEqual(arr1, arr2) {
  if (arr1.length !== arr2.length) {
    return false;
  }
  return new Set(arr1).size === new Set(arr2).size;
}

这个方法的时间复杂度为 O(n),因为它只需要创建两个 Set 并进行比较。但是这种方法并不适用于数组中包含引用类型的情况。

总体来说,以上三种方法都有各自的优缺点,你需要根据具体情况来选择使用哪种方法。