【面试】手写一个函数实现求多个一维数组的交集

题目:手写一个函数实现求多个一维数组的交集

//求两个数组的交集
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。


猜你喜欢

转载自blog.csdn.net/u010176097/article/details/80861083
今日推荐