2017-07-15 44 views
1

我有一个问题,要求我加入数组的数组并返回单个数组,形式为[ array[0][0], array[0][1], array[1][0], array[1][1], etc. ]。我在嵌套for循环中使用push方法解决了这个问题,但提示说我应该熟悉concat方法。我知道concat方法的语法及其工作方式,但我无法弄清楚如何使用它来完成提示所要求的内容。JavaScript - 使用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方法相同的输出?

回答

1

如果你想使用级联,你就不需要第二个循环中,你可以只连接一个单回路中的每个子阵列。有一点要记住的是,concat不修改存在数组,但返回一个新问题:

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']]) 
 
);

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

使用reduceas suggested by J. Guilherme,是一个更优雅的方式来做到这一点。

+0

谢谢!除了concat方法的'joined'赋值之外,我除了一切。 – Michael

+0

@Michael很高兴帮助队友:) – nem035

+0

随着休息和传播:'var joinArrayOfArrays =(... args)=> []。concat(... args);'。 ;-) – RobG

4

尝试使用减少:

arr.reduce((a, e) => a.concat(e)) 
+1

无需第二个'[ ]的论点。当你忽略它时,这意味着你想使用数组中的第一项作为起始值。另外,一个小小的空白区域不会伤害任何人:'arr.reduce((a,e)=> a.concat(e))' –

+1

感谢您的建议!我刚刚做了一个编辑来实现这个提示。 – guijob

2

可以使用前述数组作为参数值扩展元件.concat()

let res = [].concat(...[[1, 4], [true, false], ['x', 'y']]); 
 

 
console.log(res);

使用功能

const joinArrayOfArrays = (arrays = []) => [].concat(...arrays); 
 

 
let res = joinArrayOfArrays([[1, 4], [true, false], ['x', 'y']]); 
 

 
console.log(res);

0

如果你想练习你的阵列的方法,我建议找了减少MDN方法和适应这种解决这一问题作为替代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"] 
+0

谢谢!这个问题特别要求concat方法,但我一定会这样做。 – Michael

相关问题