Javascript:使用concat和reduce进行练习

时间:2017-04-04 10:23:47

标签: javascript arrays

我正在进行一项练习,从数组数组开始,我必须在一个包含给定的每个数组的所有元素的单个数组中减少它(使用reduce和concat)。

所以我从这开始:

var array = [[1,2,3],[4,5,6],[7,8,9]]

我用这个解决了这个练习:

var new_array = array.reduce(function(prev,cur){return prev.concat(cur);})

所以它有效,键入console.log(new_array)我有这个:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

但是如果我以这种方式修改函数:

var new_array = array.reduce(function(prev,cur){return prev.concat(cur);},0)

我收到此错误:

  

“TypeError:prev.concat不是函数

为什么我收到此错误?

1 个答案:

答案 0 :(得分:2)

  

我还不完全清楚如何减少工作

它的工作原理如下:

Array.prototype.reduce = function(callback, startValue){
    var initialized = arguments.length > 1,
        accumulatedValue = startValue;

    for(var i=0; i<this.length; ++i){
        if(i in this){
            if(initialized){
                accumulatedValue = callback(accumulatedValue, this[i], i, this);
            }else{
                initialized = true;
                accumulatedValue = this[i];
            }
        }
    }

    if(!initialized)
        throw new TypeError("reduce of empty array with no initial value");
    return accumulatedValue;
}

你失败的例子确实如此:

var array = [[1,2,3],[4,5,6],[7,8,9]];

var tmp = 0;
//and that's where it fails.
//because `tmp` is 0 and 0 has no `concat` method
tmp = tmp.concat(array[0]);
tmp = tmp.concat(array[1]);
tmp = tmp.concat(array[2]);

var new_array = tmp;

0替换为数组,例如[ 0 ]