我正在尝试重写reduce
方法。
我不确定两件事。首先,是它给出了错误的结果,我不知道为什么。其次,如果我没有将reducez
函数分配给const
或let
,则会出现错误。
以下代码给出了错误
无法读取未定义的属性'reducuez'
有人知道这是为什么吗?
[1, 2, 3].reducuez((a, b) => {
return a + b;
});
这是我尝试编写reduce
方法的实际代码。
Array.prototype.reducuez = function(callback) {
let initialValue = 0;
for (let i = 0; i < this.length; i++) {
initialValue += callback(this[i], initialValue)
}
return initialValue;
}
const y = [1, 2, 3].reducuez((a, b) => {
return a + b;
});
console.log(y); // this is 11, should be 6
答案 0 :(得分:2)
initialValue += callback(this[i], initialValue)
应该是
initialValue = callback(this[i], initialValue)
因为当您在每个回调之后附加值时,initalValue的值会在回调中添加两次,而由于+ =
Array.prototype.reducuez = function(callback) {
let initialValue = 0;
for (let i = 0; i < this.length; i++) {
initialValue = callback(this[i], initialValue)
}
return initialValue;
}
const y = [1, 2, 3].reducuez((a, b) => {
return a + b;
});
console.log(y); // this is 11, should be 6