知食记
搜索文档…
数组filter
filter方法经常用,实现起来也比较容易。需要注意的就是filter接收的参数依次为数组当前元素、数组index、整个数组,并返回结果为ture的元素。
1
Array.prototype.filter = function(fn,context = this){
2
if(typeof fn != 'function'){
3
throw new TypeError(`${fn} is not a function`)
4
}
5
let arr = this;
6
let reuslt = []
7
for(var i = 0;i < arr.length; i++){
8
const temp= fn.call(context,arr[i],i,arr);
9
if(temp){
10
result.push(arr[i]);
11
}
12
}
13
return result
14
}
Copied!
使用 reduce 来实现 filter
1
Array.prototype.filter = function(fn, context = this){
2
if (typeof fn !== 'function') {
3
throw new TypeError(fn + 'is not a function');
4
}
5
return this.reduce((acc, value, index) => {
6
// fix稀疏数组的情况
7
if (index in list) {
8
const ret = fn.call(context, value, index, this);
9
if(ret) acc.push(ret)
10
}
11
return acc;
12
}, []); // 注意这里的[]不能省
13
}
Copied!
复制链接