题目:手写一个函数实现求多个一维数组的交集
//求两个数组的交集
function intersect(arr0,arr1){
return arr0.filter(function(item,index,arr){
return arr1.indexOf(item) !== -1;
})
}
function intersectAll(){
//将arguments转换成数组
var argumentsArr = Array.prototype.slice.apply(arguments);
return resultArr = argumentsArr.reduce(function(prev,cur,index,arr){
return intersect(prev,cur);
})
}
var result = intersectAll([2,3,4,6,78,9],[4,5,89,0,6,3],[5,3,6],[4,5,3,55,6]);
console.log(result); //[3,6]
测试如下:
这个题中主要考察的是对JS中数组操作的熟练度,数组操作是很重要的一个模块,后面会专门写一篇JS中数组操作的文章。
在上面的实现中,先实现两个数组求交集,使用了filter的方法,这种实现方式比传统两层for循环的时间复杂度要低很多,而且代码也很简洁。
在多个数组的交集实现中,利用了JS函数的arguments属性,这里注意这个arguments只是个类数组,但不是数组,所以需要将arguments先转为数组才能使用归并函数reduce。