我正在尝试构造一个函数交集,该交集比较输入数组,并返回一个包含所有输入中包含的元素的新数组。
下面是我的代码:
id
我的代码返回:function intersection (arr){
let newArray = [];
let concatArray = arr.reduce((a,e) => a.concat(e), [])
//let uniqueArray = Array.from(new Set(concatArray));
// console.log(concatArray)
for (let i=0; i<concatArray.length; i++){
let element = concatArray[i];
concatArray.shift()
if (concatArray.includes(element)){
newArray.push(element);
}
}
return newArray;
}
const arr1 = [5, 10, 15, 20];
const arr2 = [15, 88, 1, 5, 7];
const arr3 = [1, 10, 15, 5, 20];
console.log(intersection([arr1, arr2, arr3])); // should log: [5, 15]
,距离还很远
我在做什么错?
答案 0 :(得分:4)
您可以简单地使用.filter()
和.every()
方法来获得所需的输出:
const arr1 = [5, 10, 15, 20];
const arr2 = [15, 88, 1, 5, 7];
const arr3 = [1, 10, 15, 5, 20];
const intersection = ([first, ...rest]) => first.filter(
v => rest.every(arr => arr.includes(v))
);
console.log(intersection([arr1, arr2, arr3]));