【问题标题】:JavaScript - Join arrays of an array with concat method instead of push methodJavaScript - 使用 concat 方法而不是 push 方法连接数组的数组
【发布时间】:2017-12-20 04:49:34
【问题描述】:

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

【问题讨论】:

    标签: javascript arrays push nested-loops concat


    【解决方案1】:

    尝试使用reduce:

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

    【讨论】:

    • 不需要第二个[] 参数。当你省略它时,这意味着你想使用数组中的第一项作为起始值。此外,一点空白不会伤害任何人:arr.reduce((a, e) =&gt; a.concat(e))
    • 感谢您的建议!我刚刚进行了编辑以实施此提示。
    【解决方案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);

    【讨论】:

      【解决方案3】:

      如果你想使用连接,你不需要第二个循环,你可以在一个循环中连接每个子数组。要记住的一件事是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 是一种更优雅的方法。

      【讨论】:

      • 谢谢!除了将 joined 分配给 concat 方法之外,我什么都有。
      • @Michael 很高兴能帮助队友 :)
      • 休息和传播:var joinArrayOfArrays = (...args)=&gt;[].concat(...args);。 ;-)
      • 谢谢,我是新人。现在我看到我无法使用数组连接获得解决方案的原因是我假设 concat 修改了现有数组。因此,也感谢您提供的关键信息。
      【解决方案4】:

      如果你正在尝试练习你的数组方法,我建议在 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"]
      

      【讨论】:

      • 谢谢!这个特殊的问题是专门要求 concat 方法,但我肯定会这样做。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2021-05-12
      • 2021-10-24
      • 2021-12-12
      相关资源
      最近更新 更多