JavaScript - 使用concat方法而不是push方法

时间:2017-07-15 02:34:35

标签: javascript arrays push nested-loops concat

我遇到一个问题,要求我加入一个数组的数组并以[ 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方法返回相同的输出?

4 个答案:

答案 0 :(得分:4)

尝试使用reduce:

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

答案 1 :(得分:2)

您可以使用数组前面的spread元素作为.concat()

的参数

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

console.log(res);
&#13;
&#13;
&#13;

使用功能

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

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

console.log(res);
&#13;
&#13;
&#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']])
);

使用reduceas 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"]