// 原型上更改
// 原型上更改
Array.prototype.filter = function (fn) {
// 这个参数不是 function
if (typeof fn !== "function") {
throw new Error('not function')
}
// console.log('this:'+this);//this:调用者 此时是 [1,2,3]
if (!Array.isArray(this)) {
throw new Error('not array')
}
const result = [];
for (let i = 0; i < this.length; i++) {
fn(this[i], i, this) && result.push(this[i])
}
return result
}
console.log([1, 2, 3].filter(function (i) { return i })); //[1,2,3]
// 自定义函数
function arrayFilter(arr, fn) {
if (!Array.isArray(arr)) {
throw new Error('not array');
}
if (typeof fn !== "function") {
throw new Error('not function');
}
let temp = [];
for (let i = 0; i < arr.length; i++) {
// if(fn(arr[i],i,arr)){
// temp.push(arr[i])
// }
// 上面是if判断写法 下面是 "与" 的关系写法
fn(arr[i],i,arr) && temp.push(arr[i])
}
return temp;
}
console.log(arrayFilter([1,2,3,4,5],(item,index,arr)=>item>2))// [3,4,5]
03-30
751
05-07
130