1. 重写foreach
Array.prototype.myForeach = function(cb){
var _arr = this;
var _arg2 = arguments[1] || window;
for(var i =0;i<_arr.length;i++){
cb.call(_arg2,_arr[i],i,_arr);
}
}
const arr = [1,2,3,4,5,6];
arr.myForeach((item,i)=>{
console.log(item,i);
})
2.重写map
Array.prototype.myMap = function (cb) {
var _this = this;
var _len = _this.length;
var _args = arguments[1] || window;
var res = [];
for (var i = 0; i < _len; i++) {
res.push(cb.call(_args, _this[i], i, _this));
}
return res;
}
const arr = [1, 2, 3, 4, 5];
const arr2 = arr.myMap(item => item * 2);
console.log(arr2, arr);
3.重写filter
Array.prototype.myFilter = function (cb) {
var _this = this;
var _args = arguments[1] || window;
var _len = _this.length;
var res = [];
for (var i = 0; i < _len; i++) {
cb.call(_args, _this[i], i, _this) ? res.push(_this[i]) : null;
}
return res;
}
const arr = [1, 2, 3, 4, 5, 6];
const arr2 = arr.myFilter(item => item % 2 == 0);
console.log(arr2);
4.重写every
Array.prototype.myEvery = function(cb){
var _this = this;
var _len = _this.length;
var _arg2 = arguments[1] || window;
for(var i = 0;i<_len;i++){
if(!cb.call(_arg2,_this[i],i,_this)){
return false;
}
}
return true;
}
const arr = [2,4,6,8,9];
const res = arr.myEvery(item=>item%2===0)
console.log(res);
5.重写some
Array.prototype.mySome = function(cb){
var _this = this;
var _len = _this.length;
var _arg2 = arguments[1] || window;
for(var i = 0;i<_len;i++){
if(cb.call(_arg2,_this[i],i,_this)){
return true;
}
}
return false;
}
const arr = [2,4,6,8,23];
const res = arr.mySome(item=>item%2===0)
console.log(res);
6.重写reduce
Array.prototype.myReduce = function (cb, initialValue) {
var _this = this;
var _len = _this.length;
var _arg3 = arguments[2] || window;
for (var i = 0; i < _len; i++) {
initialValue = cb.call(_arg3, initialValue, _this[i], i, _this);
}
return initialValue;
}
var initialValue = 0;
var arr = [1, 2, 3, 4];
var res = arr.myReduce(function (prev, item, index, array) {
console.log(index);
return prev +item;
}, initialValue)
console.log(res);
7.重写reduceRight
Array.prototype.myReduceRight = function (cb, initialValue) {
var _this = this;
var _len = _this.length;
var _arg3 = arguments[2] || window;
for (var i = _len; i >= 0; i--) {
initialValue = cb.call(_arg3, initialValue, _this[i], i, _this);
}
return initialValue;
}