注意:不能使用箭头函数
some
使用示例
const arr = [1,2,3,4];
arr.some(item => item === 0); // false
arr.some(item => item === 1); // true
Array.prototype._some = function(cb) {
let res = false;
for (let i=0; i<this.length; i++) {
res = cb(this[i]);
if (res) return true;
}
return res;
}
every
Array.prototype._every = function(cb) {
let res = true;
for (let i=0; i<this.length; i++) {
res = cb(this[i]);
if (!res) return false;
}
return res;
}
find
使用示例
const characters = [
{ id: 1, name: 'ironman' },
{ id: 2, name: 'black_widow' },
{ id: 3, name: 'captain_america' },
{ id: 4, name: 'captain_america' },
];
function getCharacter(name) {
return character => character.name === name;
}
const res = characters._find(getCharacter('captain_america'));
// {id: 4, name: "captain_america"}
Array.prototype._find = function(cb) {
let res;
for (let i=0; i<this.length; i++) {
const item = this[i];
if (cb(item)) {
res = item;
}
}
return res;
}
filter
使用示例
const fArr = characters._filter(item => {
return item.id > 1;
});
// [ {id: 3, name: "captain_america"}, {id: 4, name: "captain_america"}]
Array.prototype._filter = function(cb) {
const resArr = [];
for (let i=0; i<this.length; i++) {
const item = this[i];
if (cb(item)) {
resArr.push(item);
}
}
return resArr;
}
reduce
使用示例
const arr = [1,2,3,4];
arr.reduce((result, cur) => {
console.log(result);
return cur;
}, 0);
// 0 1 2 3 4
Array.prototype._reduce = function (callback, initVal) {
let i = 0
let result = initVal
if (initVal === undefined || initVal === null) {
result = this[0]
i++
}
for (i; i < this.length; i++) {
result = callback(result, this[i])
}
return result
}
// 测试
const arr = [1, 2, 3]
let result = arr._reduce((a, b) => {
return a + b
}, 0)
console.log(result) // 6