📌  相关文章
📜  如何使用 JavaScript 找到两个给定数组中的任何一个中存在的每个元素?(1)

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

如何使用 JavaScript 找到两个给定数组中的任何一个中存在的每个元素?

在编写任何代码之前,首先要明确两个数组中存在的元素定义是什么。为了解决这个问题,我们将定义两个数组,然后查找它们之间的所有公共元素。

什么是公共元素?

公共元素是两个数组中同时存在的元素。例如, [1, 2, 3] 和 [2, 4, 6] 有一个公共元素,那就是 2。

实现方法

有许多方法可以解决这个问题,每种方法都有自己的优缺点,下面我们来介绍几种最常用的方法:

方法一:使用双重循环

该方法简单易懂,但它以 O(n^2) 的时间复杂度运行,因此不适用于大型数组。

function findCommonElements(arr1, arr2) {
  var result = [];
  for (var i = 0; i < arr1.length; i++) {
    for (var j = 0; j < arr2.length; j++) {
      if (arr1[i] === arr2[j]) {
        result.push(arr1[i]);
        break;
      }
    }
  }
  return result;
}
方法二:使用 indexOf 方法

该方法使用 indexOf 方法检查第一个数组中的每个元素是否存在于第二个数组中。如果存在,则将该元素添加到结果数组中。虽然该方法避免了双重循环,但依然需要遍历两个数组,因此时间复杂度为 O(n^2)。

function findCommonElements(arr1, arr2) {
  var result = [];
  for (var i = 0; i < arr1.length; i++) {
    if (arr2.indexOf(arr1[i]) !== -1) {
      result.push(arr1[i]);
    }
  }
  return result;
}
方法三:使用对象

该方法使用一个对象来存储第一个数组中的元素,然后将第二个数组中的每个元素与该对象进行比较。如果元素已存在于对象中,则将该元素添加到结果数组中。该方法时间复杂度为 O(n),但需要额外的存储空间。

function findCommonElements(arr1, arr2) {
  var result = [];
  var obj = {};
  for (var i = 0; i < arr1.length; i++) {
    obj[arr1[i]] = true;
  }
  for (var j = 0; j < arr2.length; j++) {
    if (obj[arr2[j]]) {
      result.push(arr2[j]);
    }
  }
  return result;
}
方法四:使用 Set 数据结构

该方法使用 ES6 中的 Set 数据结构,它类似于数组,但只包含唯一的值。首先创建一个 Set 来存储第一个数组中的元素,然后使用 forEach 方法遍历第二个数组,并检查这些元素是否存在于该 Set 中。如果存在,则将该元素添加到结果数组中。该方法时间复杂度为 O(n),但需要支持 ES6 并使用浏览器或 Node.js 来运行。

function findCommonElements(arr1, arr2) {
  var result = [];
  var set1 = new Set(arr1);
  arr2.forEach(function(element) {
    if (set1.has(element)) {
      result.push(element);
    }
  });
  return result;
}

以上就是几种最常见的解决方案。使用任何一种方法都能找到两个数组中的公共元素,但具体应该使用哪种方法取决于具体的应用场景。在所有情况下,最重要的是优化代码以提高性能并确保其可读性。