数组取交集:查找并输出多个数组中都重复出现的元素
2024-01-18 19:22:20
JavaScript应用:多数组中找到两次及以上的元素
问题概述
如何快速找出多个数组中共同出现的元素?以 JavaScript 语言实现,假设我们有多个数组:[1,2,3] 和 [1,4,2,1],通过查找并输出那些同时存在于两个数组中的元素,结果将是[1,2]。
解决方案
首先,我们可以使用 JavaScript 的 Array.prototype.filter 方法创建一个新数组,该数组包含第一个数组中的所有元素,同时存在于第二个数组中。然后,我们可以使用 Array.prototype.reduce 方法将新数组中的元素聚合为一个单独的数组,其中包含所有在所有数组中都重复出现的元素。
const arrays = [[1, 2, 3], [1, 4, 2, 1], [1, 5, 6, 2]];
// 使用 Array.prototype.filter 方法过滤出第一个数组中的元素,同时存在于第二个数组中
const intersection = arrays[0].filter(element => arrays[1].includes(element));
// 使用 Array.prototype.reduce 方法将交集数组中的元素聚合为一个单独的数组,包含所有在所有数组中都重复出现的元素
const result = intersection.reduce((acc, element) => {
if (arrays.every(array => array.includes(element))) {
acc.push(element);
}
return acc;
}, []);
console.log(result); // 输出: [1, 2]
在上面的代码中,我们首先将数组 arrays 中的第一个数组和第二个数组分别赋值给 variablesarray1 和 array2。然后,我们使用 Array.prototype.filter 方法创建一个新的数组 intersection,该数组包含 array1 中的所有元素,同时存在于 array2 中。接下来,我们使用 Array.prototype.reduce 方法将 intersection 数组中的元素聚合为一个单独的数组 result,其中包含所有在所有数组中都重复出现的元素。最后,我们将 result 数组输出到控制台,得到结果:[1, 2]。
算法性能
该算法的时间复杂度为 O(n * m),其中 n 是数组的数量,m 是数组中元素的数量。这是因为我们使用 Array.prototype.filter 方法对每个数组进行迭代,而 Array.prototype.reduce 方法的复杂度为 O(n)。
总结
本文介绍了一种使用 JavaScript 查找多个数组中共同出现的元素的算法。该算法基于 Array.prototype.filter 和 Array.prototype.reduce 方法,时间复杂度为 O(n * m)。