Ben*_*nny 2 javascript arrays reduce concat
我是javascript的新手,我有一个问题,使用reduce和concat函数将几个数组展平为一个完整的数组.
var array = [ [1, 3], [6, 6], [3, 3] ];
var finishedArray = function(array) {
var reducedArray = {};
var completeArray = {};
for (var i = 0; i < array.length; i++) {
reducedArray[i] = array[i].reduce(function (a, b) {
return a + b;
});
completeArray = reducedArray[i].concat(reducedArray[i + 1]);
}
return completeArray;
}
console.log(finishedArray(array));`
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:completeArray = reducedArray[i].concat(reducedArray[i + 1]);
TypeError: undefined is not a function
这是为什么???
简单的方法:
var finishedArray = [ [1, 3], [6, 6], [3, 3] ].reduce(Function.apply.bind([].concat), [])
Run Code Online (Sandbox Code Playgroud)
另一个比可读性更好的选择是使用命名函数,它允许您在许多地方将此转换应用于许多数组,而不是每次都有如此丑陋的样板:
function flat(a,b){return a.concat(b);}
[[1,3],[6,6],[3,3]].reduce(flat);
[[7,3],[4,6],[8,1]].reduce(flat);
Run Code Online (Sandbox Code Playgroud)
这是压扁许多不同阵列的最短路径.
请注意,您也可以使用与我的第一个建议相同的快速但难看的语法编写可重用的文本:
var flat=Function.apply.bind([].concat);
Run Code Online (Sandbox Code Playgroud)
还要注意,elclanrs显示了一个我更喜欢的更简单的方法:
[].concat.apply([],[[1,3],[6,6],[3,3]])
Run Code Online (Sandbox Code Playgroud)