filter 方法
对数组每一项运行给定函数,返回数组中函数运行返回 true 时的结果
- 示例
let arr = [1, 2, 3, 4, 5];
let fitered = arr.filter(item => item > 3);
console.log(fitered); // [4, 5]
- 实现
Array.prototype.filter = function (fn) {
let newArr = [];
for (let i = 0, len = this.length; i < len; i++) {
fn(this[i]) && newArr.push(this[i]);
}
return newArr;
}
console.log(arr.filter(item => item > 3)) // [4, 5]
map 方法
对数组中的每一项运行给定的函数,返回每次函数调用结果组成的数组
- 示例
let arr = [1, 2, 3, 4, 5];
let maped = arr.map(item => item*2);
console.log(maped) // [2, 4, 6, 8, 10]
- 实现
Array.prototype.map = function (fn) {
let newArr = [];
for (let i = 0, len = this.length; i < len; i++) {
newArr.push(fn(this[i]));
}
return newArr;
}
console.log(arr.map(item => item + 1)); // [2, 3, 4, 5, 6]
forEach 方法
无返回值
- 实现
Array.prototype.forEach = function (fn) {
for (let i = 0, len = this.length; i < len; i++) {
fn(this[i]);
}
}
some 方法
对数组的每一项运行给定函数,只要有一项使得函数返回 true 则方法返回 true ,后续元素不再检测
- 实现
Array.prototype.some = function (fn) {
for (let i = 0, len = this.length; i < len; i++) {
if (fn(this[i])) {
return true;
}
}
return false;
}
every 方法
对数组每一项运行给定函数,只有每一项都使得函数返回 true 则方法返回 true
- 实现
Array.prototype.every = function (fn) {
for (let i = 0, len = this.length; i < len; i++) {
if (!fn(this[i])) {
return false;
}
}
return true;
}
归并方法 reduce
迭代数组所有项,对每一项运行给定函数,该函数接收四个参数(前一个值,当前值,项的索引,数组对象),函数返回的值将作为第一个参数传给下一项
- 示例
let arr = [1, 2, 3, 4, 5];
let sum = arr.reduce(function(pre, cur, index, arr) {
return pre + cur;
});
console.log(sum); // 15
- 实现
Array.prototype.reduce = function (reducer, initVal = this[0] || 0) {
for (let i = 1, len = this.length; i < len; i++) {
initVal = reducer(initVal, this[i], i, this);
}
return initVal;
}