想要手写filter,必须要知道filter是干嘛用的?有什么样的属性?接受什么样的传参类型,返回什么样的结果。否则,肯定写不出来一个filter的函数!

面试题十七:如何手写filter|Array.prototype.filter()-QUI-Notes

filter定义

filter() 方法创建一个 新 的数组,新数组中的元素是通过检查指定数组中 符合条件 的所有元素。个人理解:过滤数组,返回满足添加的子元素。

filter() 方法接收3个参数:子元素,子元素索引,全部数组。

array.filter(function(arr[key],key,arr), thisValue)

特点:

  • a.创建新数组
  • b.不检测空数组

手写函数

Array.prototype.filter = function(fn,content){
	if(typeof fn != 'function'){
		throw 'fn不是个函数'
	}
	let arr = this;
	let news = [];
	for(let keys in arr){
	  let item = fn.call(content,arr[keys],keys,arr);
	  if(item){
	  	news.push(arr[keys])
	  }
	}
	return news;
}