2016-01-02 17 views
-3

我正在浏览eloquentjavascript课程,并且对某些代码有疑问。Javascript无法读取undefined雄辩的属性

问题集是尝试使用reduce函数来压扁数组。下面是我的代码:

console.log(reduce(arrays, function(flat, current) { 
    for (var f = 0; f < (current.length); f++) { 
     flat.push(current[f]); 
    }}, [])) 

我不断收到错误

TypeError: Cannot read property 'push' of undefined (line 17)

为什么会出现这个问题?我已经将当前设置为一个空数组([]),那为什么它仍然是未定义的?

为减少函数的代码是

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

你必须显示的'减少()'函数的代码。 – JJJ

+0

谢谢。我只是把它。 – Pebbles

+0

当然,但我不知道你为什么不会说'return flat.concat(current)'。 –

回答

0

function(flat, current)不返回任何东西,所以在这一行:循环的一次迭代后

current = combine(current, array[i]); 

current将成为undefined
您可以修复通过添加return flat;你匿名函数的结尾:

console.log(reduce(arrays, function(flat, current) { 
    for (var f = 0; f < (current.length); f++) { 
     flat.push(current[f]); 
    } 
    return flat; 
}, []));