比较简单,都是for循环上加上特别的处理。
// filter 方法实现
Array.prototype.myFilter = function(callback) {
const filteredArray = [];
// 遍历数组元素
for (let i = 0; i < this.length; i++) {
// 根据回调函数的返回值进行过滤
if (callback(this[i], i, this)) {
filteredArray.push(this[i]); // 符合条件的元素加入结果数组
}
}
return filteredArray; // 返回过滤后的新数组
};
// map 方法实现
Array.prototype.myMap = function(callback) {
const mappedArray = [];
// 遍历数组元素
for (let i = 0; i < this.length; i++) {
// 对每个元素进行映射操作,并将结果加入新数组
mappedArray.push(callback(this[i], i, this));
}
return mappedArray; // 返回映射后的新数组
};
// reduce 方法实现
Array.prototype.myReduce = function(callback, initialValue) {
let accumulator = initialValue === undefined ? this[0] : initialValue;
// 根据初始值是否存在决定起始位置
for (let i = initialValue === undefined ? 1 : 0; i < this.length; i++) {
accumulator = callback(accumulator, this[i], i, this); // 将累加器和当前元素传递给回调函数
}
return accumulator; // 返回最终的累计结果
};
// every 方法实现
Array.prototype.myEvery = function(callback) {
// 遍历数组元素
for (let i = 0; i < this.length; i++) {
// 如果有任何元素不满足条件,则返回 false
if (!callback(this[i], i, this)) {
return false;
}
}
return true; // 所有元素都满足条件,返回 true
};