【问题标题】:Array.push() doesn't work as expected [duplicate]Array.push() 不能按预期工作[重复]
【发布时间】:2019-01-06 20:10:10
【问题描述】:

我有一个数组。出于测试目的,我将其内容输出如下:

for (var i=0; i<array1.length; i++){
        console.log(i + ':' + array1[i]);
    }


0:String1
1:String2

现在我有第二个数组。我想要做的是将array1的内容推送到array2中。

我用这一行来做这个:

array2.push(array1);

不幸的是,第一个数组的内容只存在于第二个数组的一个索引中。用逗号分隔。

例如,如果我们在操作之后使用查看第二个数组的内容,它将是这样的:

for (var i=0; i<array1.length; i++){
        console.log(i + ':' + array1[i]);
    }


0:Old_string1
1:Old_string2
2:Old_string3
3:Old_string4
4:String1,String2

虽然我想要这个输出:

4:String1
5:String2

【问题讨论】:

  • ...传播:array2.push(...array1)
  • 你可以使用array2.concat(array1)
  • 嗨,你能详细说明一下你想要的输入和输出的例子吗?

标签: javascript arrays node.js


【解决方案1】:

您应该使用扩展运算符 (...) 来破坏 array1 中保存的值并将它们推送到 array2。像这样:

array2.push(...array1);

这会将array1 中保存的所有strings 分离为单独的值,然后将它们推入。ES6 中引入了一些不错的语法糖。

【讨论】:

    【解决方案2】:

    您应该尝试:

    array2 = array2.concat(array1);
    

    或者使用 ES6 解构

    array2.push(...array1);
    

    【讨论】:

    • 这里的解决方案很好,但是答案缺少对为什么 OP当前解决方案不起作用的解释。如果我们能加入这个和 gkgkgkgk 的答案:)
    • 加一个用于推荐 ES6 语法:-)
    【解决方案3】:

    Array.push 不这样做。你需要Array.concat

    var array1 = ['a', 'b', 'c'];
    var array2 = ['d', 'e', 'f'];
    
    console.log(array1.concat(array2));
    // expected output: Array ["a", "b", "c", "d", "e", "f"]
    

    【讨论】:

    • 值得一提的是,concat 创建了一个新数组。它不会改变现有的。
    【解决方案4】:

    array.push 将一个或多个对象推送到数组中。不能在 push() 方法中传递完整的数组,否则内容将被计为一个对象。要将两个数组合并为一个,请使用 concat。

    【讨论】:

      【解决方案5】:

      使用pushapply

      const a1 = ["all", "my", "strings"];
      const a2 = ["belong", "together"];
      Array.prototype.push.apply(a1, a2);
      console.log(a1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-17
        • 2012-12-16
        • 2018-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多