gpt4 book ai didi

javascript - 重新创建 JavaScript Reduce 函数第 2 部分

转载 作者:行者123 更新时间:2023-11-30 16:22:25 24 4
gpt4 key购买 nike

这与我在此处重新创建的 reduce 函数有关,但问题不同:Recreating JavaScript's reduce function .

我正在阅读 Eloquent JavaScript 并注意到他们用更少的代码以稍微不同的方式重新创建了 reduce 函数:

function reduce(array, combine, start) {
var current = start;
for (var i = 0; i < array.length; i++)
current = combine(current, array[i]);
return current;
}

console.log(reduce([1, 2, 3, 4], function(a, b) {
return a + b;
}, 0)); // → 10

我注意到这只有在有开始时才有效。例如,如果我拿走 start(0),它只是:

console.log(reduce([1, 2, 3, 4], function(a, b) {
return a + b;
})); // NaN

它会返回 NaN。这对我来说没有意义,因为书上说:“如果您的数组至少包含一个元素,则可以省略 start 参数。该方法会将数组的第一个元素作为其起始值,并从第二个元素开始减少。”

只有当我用 if 语句调整它时,它才会产生带或不带 start(0) 的“10”。

function reduce(array, combine, start) {
var current = start;

for (var i = 0; i < array.length; i++)
if(current !==undefined){
current = combine(current, array[i]);
}else{
current=array[i];
}

return current;
}

我错过了什么?

最佳答案

根据MDN,它应该是这样的(此处为简化版):

function reduce(array, combine, start) {
var current = start;
var i = 0;
if (arguments.length < 2) {
while (array[i] === undefined) {
i ++;
if (array.length >= i) {
throw new Error('Empty array with no initial value');
}
}
current = array[i];
}

for (; i < array.length; ++ i) {
if (array[i] === undefined) continue;
if (current !== undefined) {
current = combine(current, array[i]);
} else {
current=array[i];
}
}

return current;
}

关于javascript - 重新创建 JavaScript Reduce 函数第 2 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34554974/

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