every方法
对数组中的每一项进行判断,全部符合判断条件时返回true,任意一项不符合返回false
Array.prototype.myEvery = function(fn, arr = this) {
const self = this;
for (let i = 0; i < arr.length; i++) {
const it = arr[i];
if (!fn.call(self, it, i)) {
return false;
}
}
return true;
}
some方法
和every相对应,任意一项满足判断条件时返回true
Array.prototype.mySome = function(fn, arr = this) {
const self = this;
for (let i = 0; i < arr.length; i++) {
const it = arr[i];
if (fn.call(self, it, i)) {
return true;
}
}
return false;
}
filter方法
满足条件的项会进行返回
Array.prototype.myFilter = function(fn, arr = this) {
const self = this;
const res = [];
for (let i = 0; i < arr.length; i++) {
const it = arr[i];
if (fn.call(self, it, i)) {
res.push(arr[i]);
}
}
return res;
}
forEach方法
遍历数组项
Array.prototype.myForEach = function(fn, arr = this) {
const self = this;
for (let i = 0; i < arr.length; i++) {
const it = arr[i];
fn.bind(self, it, i)();
}
}
map方法
对数组的每一项进行操作后返回
Array.prototype.myMap = function(fn, arr = this) {
const self = this;
const res = [];
for (let i=0; i < arr.length; i++) {
const it = arr[i];
res[i] = fn.call(self, it, i);
}
return res;
}
find方法
返回第一个满足查找条件的项
Array.prototype.myFind = function(fn, arr = this) {
const self = this;
const fnT = fn.bind(self)
for (let it of arr) {
if (fnT(it)) {
return it;
}
}
return undefined;
}
reduce方法
数组依次遍历该项和下一项,可提供初始值进行遍历
Array.prototype.myReduce = function(fn, initial) {
let res = initial || this[0];
const index = initial ? 0 : 1;
for (let i = index; i < this.length; i++) {
res = fn.apply(this, [res, this[i], i, this]);
}
return res;
}