gpt4 book ai didi

javascript - 从头开始实现reduce(),不知道JS怎么知道 "array"是什么

转载 作者:行者123 更新时间:2023-12-01 01:05:23 25 4
gpt4 key购买 nike

我正在尝试从头开始实现reduce()。我能够让它工作,但是即使我从未在任何地方定义过“数组”,JavaScript 如何知道它是什么?

function reduce(callback, initialVal) {
var accumulator = (initialVal === undefined) ? undefined : initialVal;
for (var i=0; i<array.length; i++) {
if (accumulator !== undefined) {
accumulator = callback(accumulator, array[i], i, array);
} else {
accumulator = array[i]
}
}
return accumulator;
};

// testing a basic sum
arr = [1,2,3]
arr.reduce( (accumulator, elem) => accumulator+=elem )

编辑:我开始工作了:D 我将“array”更改为“this”,因为我在 Array.prototype 下创建了一个新方法。

Array.prototype.myReduce = function(callback, initialVal) {
var accumulator = (initialVal !== undefined) ? initialVal : undefined;
for (var i=0; i<this.length; i++) {
if (accumulator !== undefined) {
accumulator = callback(accumulator, this[i], i, this);
} else {
accumulator = this[i]
}
}
return accumulator;
};

arr.myReduce( (accumulator, elem) => accumulator+=elem )
arr.myReduce( (accumulator, elem) => accumulator+=elem , 100)

最佳答案

你们已经很接近了。似乎缺少的一个见解是,在您的函数内部,this 将被定义为调用您的函数的数组。因此,您可以在当前使用 array 的地方使用 this ,这在您的函数中将是未定义的(正如您所怀疑的)。您可能还想在不同的位置启动循环,具体取决于是否传入初始值。例如:

function reduce(callback, initialVal) {
var accumulator = ( initialVal === undefined) ? this[0] : initialVal;
var start = (initialVal === undefined) ? 1 : 0
for (var i = start; i < this.length; i++) {
accumulator = callback(accumulator, this[i])
}
return accumulator;
};

Array.prototype.myReduce = reduce

// no init value
console.log([1, 2, 3].myReduce((sum, curr) => sum + curr))

// init value:
console.log([1, 2, 3].myReduce((sum, curr) => sum + curr, 1000))

关于javascript - 从头开始实现reduce(),不知道JS怎么知道 "array"是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55699861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com