js手写数组方法之map(),reduce(),filter(),foreach()
// map() 方法通过指定函数处理数组的每个元素,并返回处理后的新数组。
Array.prototype.myMap = function(callback, thisArg) {
let result = [];
for (let i = 0; i < this.length; i++) {
if (this.hasOwnProperty(i)) {
result.push(callback.call(thisArg, this[i], i, this));
}
}
return result;
};
// reduce() 方法对数组中的所有元素调用指定的reducer函数,将其结果汇总为单个返回值。
Array.prototype.myReduce = function(callback, initialValue) {
let accumulator = initialValue !== undefined ? initialValue : this[0];
let k = initialValue !== undefined ? 0 : 1;
for (; k < this.length; k++) {
accumulator = callback(accumulator, this[k], k, this);
}
return accumulator;
};
// filter() 方法创建一个新数组,其包含通过所提供函数实现的测试的所有元素。
Array.prototype.myFilter = function(callback, thisArg) {
let result = [];
for (let i = 0; i < this.length; i++) {
if (this.hasOwnProperty(i) && callback.call(thisArg, this[i], i, this)) {
result.push(this[i]);
}
}
return result;
};
// forEach() 方法对数组的每个元素执行一次提供的函数。
Array.prototype.myForEach = function(callback, thisArg) {
for (let i = 0; i < this.length; i++) {
if (this.hasOwnProperty(i)) {
callback.call(thisArg, this[i], i, this);
}
}
};
// 示例使用
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.myMap(function(num) {
return num * 2;
});
console.log(doubled); // 输出: [2, 4, 6, 8, 10]
const sum = numbers.myReduce(function(acc, num) {
return acc + num;
}, 0);
console.log(sum); // 输出: 15
const evenNumbers = numbers.myFilter(function(num) {
return num % 2 === 0;
});
console.log(evenNumbers); // 输出: [2, 4]
numbers.myForEach(function(num, index) {
console.log(`Index ${index}: ${num}`);
});
这段代码展示了如何手动实现JavaScript中的map()
, reduce()
, filter()
, 和 forEach()
数组方法。这有助于理解这些函数的工作原理,并且可以在不依赖原生方法的环境中使用。
评论已关闭