📅  最后修改于: 2023-12-03 15:10:04.962000             🧑  作者: Mango
在 JavaScript 中,有时候我们需要从多个数组中找出包含在所有数组中的公共元素。这个问题可以通过多种方式来解决,本文将介绍其中两种最常见的方法。
我们可以通过遍历其中一个数组,然后对于每个元素,判断该元素是否同时存在于其他数组中。这个方法需要使用 indexOf 和 filter 方法来实现。
const arr1 = [1, 2, 3, 4, 5];
const arr2 = [2, 4, 6, 8];
const arr3 = [2, 3, 5];
const commonElements = arr1.filter((element) => {
return arr2.indexOf(element) !== -1 && arr3.indexOf(element) !== -1;
});
console.log(commonElements); // [2]
在上述代码中,我们定义了三个数组 arr1,arr2,arr3,并且使用 filter 方法遍历了 arr1。在 filter 方法的回调函数中,我们判断元素是否同时出现在 arr2 和 arr3 中,如果是,则保留该元素并返回最终的结果数组。
另外一种实现方式是将所有数组转换为 Set 去重后,使用 reduce 方法来找出所有数组的交集。
const arr1 = [1, 2, 3, 4, 5];
const arr2 = [2, 4, 6, 8];
const arr3 = [2, 3, 5];
const set1 = new Set(arr1);
const set2 = new Set(arr2);
const set3 = new Set(arr3);
const commonElements = Array.from([set1, set2, set3].reduce((accumulator, currentSet) => {
return new Set([...accumulator].filter((element) => currentSet.has(element)));
}));
console.log(commonElements); // [2]
在上述代码中,我们分别创建了三个 Set 对象,并使用 reduce 方法迭代这些 Set 对象。在 reduce 的回调函数中,我们使用 filter 方法和 has 方法来判断元素是否存在于所有的 Set 对象中,并使用 Set 对象的构造函数和展开运算符将最终结果转换为数组。
无论使用哪种方法,只要正确理解了方法的原理,就可以轻松地找出多个数组的公共元素啦!