我遇到一个问题,要求我加入一个数组的数组并以[ array[0][0], array[0][1], array[1][0], array[1][1], etc. ]
的形式返回一个数组。我在嵌套的for循环中使用push
方法解决了它,但提示符说我应该熟悉concat
方法。我知道concat
方法语法及其工作原理,但我无法弄清楚如何使用它来执行提示要求的操作。
以下是使用push
方法的解决方案:
function joinArrayOfArrays(arr) {
var joined = [];
for (var i = 0; i < arr.length; i++) {
for (var k = 0; k < arr[i].length; k++) {
joined.push(arr[i][k]);
}
}
return joined;
}
joinArrayOfArrays([[1, 4], [true, false], ['x', 'y']]);
// => [ 1, 4, true, false, 'x', 'y' ]
如何使用concat
方法返回相同的输出?
答案 0 :(得分:4)
尝试使用reduce:
arr.reduce((a, e) => a.concat(e))
答案 1 :(得分:2)
您可以使用数组前面的spread元素作为.concat()
let res = [].concat(...[[1, 4], [true, false], ['x', 'y']]);
console.log(res);
&#13;
使用功能
const joinArrayOfArrays = (arrays = []) => [].concat(...arrays);
let res = joinArrayOfArrays([[1, 4], [true, false], ['x', 'y']]);
console.log(res);
&#13;
答案 2 :(得分:1)
如果要使用连接,则不需要第二个循环,只需在单个循环中连接每个子数组即可。要记住的一件事是concat
不修改存在的数组但返回一个新的数组:
function joinArrayOfArrays(arr) {
var joined = [];
for (var i = 0; i < arr.length; i++) {
joined = joined.concat(arr[i]) // concat sub array
}
return joined;
}
console.log(
joinArrayOfArrays([[1, 4], [true, false], ['x', 'y']])
);
您也可以以类似的方式使用spread:
function joinArrayOfArrays(arr) {
var joined = [];
for (var i = 0; i < arr.length; i++) {
joined = [...joined, ...arr[i]] // spread
}
return joined;
}
console.log(
joinArrayOfArrays([[1, 4], [true, false], ['x', 'y']])
);
使用reduce
,as suggested by J. Guilherme,是一种更优雅的方法。
答案 3 :(得分:0)
如果您正在尝试练习数组方法,我建议在MDN上查找reduce方法,并将此解决方案作为for循环的替代方法来适应此问题:
function joinArrayOfArrays(arr) {
return arr.reduce(function(a, b) {
return a.concat(b);
});
}
var output = joinArrayOfArrays([[1, 4], [true, false], ['x', 'y']]);
console.log(output);
// [1, 4, true, false, "x", "y"]