Javascript: 为什么数组变量赋值在这个函数内外表现不同?

Javascript: Why array variable assignment is behaving differently inside and outside this function?

对于我的生活,我就是想不通我在这里做错了什么。

我正在尝试同时使用 reduce 和 concat 数组方法来获取二维数组的所有值并将它们组合成一个值(基本上将它们压缩成一个数组然后将它们相加)。

我保留 运行 的问题是,当我尝试创建一个 for/loop 来连接每个数组元素时,我传递给函数的参数没有被识别为一个数组,因此我对 .concat() 的调用失败了。我在函数的开头放置了一个 console.log() 以查看该元素是否被识别为二​​维数组中的第一个数组元素,并且它以“1”(?)出现。

我在函数之外尝试了另一个测试,它记录为实际的数组元素。我在这里做错了什么?代码如下:

var arrays = [[1, 2, 3], [4, 5], [6]];

var myArray = arrays[0]; // Test
console.log(myArray); // Test

var flatArray = arrays.reduce(function(arrays)
{
    console.log(arrays[0]); // Test

    for (var i = 0; i < arrays.length - 1; i++)
    {
        arrays[0].concat(arrays[i+1]);
    }
    return arrays;

});

console.log(flatArray);

这是我不断得到的输出:

Array [ 1, 2, 3 ]
1
TypeError: arrays[0].concat is not a function

在函数内部时,数组似乎正在被转换为数字类型...?

您使用 .reduce() 不正确,您甚至不需要使用它来展平数组。你可以这样做:

var flatArray = [].concat.apply([],arrays);

工作演示:http://jsfiddle.net/jfriend00/wfjyfp42/


要理解 .reduce(),您传递给它的回调有四个参数(参见 MDN reference)。前两个参数对于正确使用 .reduce() 很重要:

callback(previousValue, currentValue, index, array)

previousValue是目前为止在减量中的累计值。 currentValue 是要迭代的数组的下一个元素。最后两个参数不需要的话可以不用。

您的代码仅使用 previousValue,因此它永远不会查看 .reduce() 传入的数组中的下一项。

您可以使用 .reduce() 解决方案,如下所示:

var flatArray = arrays.reduce(function(previousValue, currentValue) {
    return previousValue.concat(currentValue);
}, []);

工作演示:http://jsfiddle.net/jfriend00/2doohfc5/

您的代码有误:

var flatArray = arrays.reduce(function(param) {})

该参数将是您的数组向量的一个元素

勾选这个https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

Reduce 对两个元素执行操作。

var sum = [[1, 2, 3], [4, 5], [6]].reduce(function(a, b) { 
    return a.concat(b);
}).reduce(function(a, b) { 
    return a + b;
});