reduce
let arr = [1,2,3,4];
Array.prototype.reduce = function(callback, prev) {
if(this == undefined) {
return 'this is undefined';
}
if(typeof callback !== 'function') {
throw new TypeError('callback is not a function');
}
let arr = this;
for(let i = 0; i < arr.length; i++) {
if(prev === undefined) {
prev = callback(arr[i], arr[i+1], i+1, arr);
} else {
prev = callback(prev, arr[i], i, arr);
}
}
return prev;
}
let sum = arr.reduce((prev,cur) => {
return prev+cur;
},0)
console.log(sum);
filter
let arr = [1,2,3,4];
Array.prototype.filter = function(callback, thisArgs) {
if(this == undefined) {
return 'this is undefined';
}
if(typeof callback !== 'function') {
throw new TypeError('callback is not a function');
}
let arr = this;
let res = [];
for(let i = 0; i < arr.length; i++) {
if(callback.call(thisArgs,arr[i])) {
res.push(arr[i]);
}
}
return res;
}
let arr2 = arr.filter((item) => {
return item % 2 == 0 ? true : false;
})
console.log(arr2);
map
Array.prototype.map = function(callback, thisArgs) {
if(this == undefined) {
return 'this is undefined';
}
if(typeof callback !== 'function') {
throw new TypeError('callback is not a function');
}
let arr = this;
let res = [];
for(let i = 0; i < arr.length; i++) {
res.push(callback.call(thisArgs, arr[i]));
}
return res;
}
let arr3 = arr.map((item) => {
return item * 2;
})
console.log(arr3);
forEach
Array.prototype.forEach = function(callback,thisArg){
var len = this.length;
for(var i = 0; i < len; i++){
callback.call(thisArg,this[i], i, this);
}
}
let arr = [1,2,3,4];
arr.forEach((item) => {
return item * 2;
})
console.log(arr);
reduce 实现map
// reduce 实现map
Array.prototype.map = function(callback, thisArgs){
let res = []
this.reduce((prev, cur) => {
res.push(callback(cur))
},arr[0])
return res
}
let arr = [1,2,3,4]
let arr3 = arr.map((item) => {
return item * 2
})
console.log(arr3)