【问题标题】:How to concat 2 sliced array?如何连接 2 个切片数组?
【发布时间】:2015-10-23 00:06:17
【问题描述】:

我有:

var a = [1,2,3,4,5,6,7,8,9]

我正在尝试做:

var b = [];
b.concat(a.slice(0,3), a.slice(-3))

结果我有:

b == []

如何从 b 的数组中获取 3 个第一个元素和 3 个最后一个元素?

【问题讨论】:

    标签: javascript arrays slice concat


    【解决方案1】:

    concat 不能在数组上内联工作。 concat() 的结果必须被捕获。

    concat() 方法返回一个新数组,该数组由调用它的数组与作为参数提供的数组和/或值相连接。

    您没有更新 b 数组的值。

    var a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    var b = [].concat(a.slice(0, 3), a.slice(-3));
    
    document.write(b);
    console.log(b);

    你也可以concat切片数组。

    var a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    var b = a.slice(0, 3).concat(a.slice(-3));
    
    document.write(b);
    console.log(b);

    【讨论】:

      【解决方案2】:

      Array.prototype.concat 没有副作用,这意味着它不会修改原始数组(即b

      我看到了两种实现你想要的方法:

      concat的结果赋值给b(它会破坏对原始数组的引用,因为它是一个全新的数组)

      b = b.concat(a.slice(0,3), a.slice(-3));
      

      或者使用Array.prototype.pushapply修改b就地

      Array.prototype.push.apply(b, a.slice(0,3).concat(a.slice(-3)));
      

      这个有点棘手。为什么要使用apply

      因为b.push(a.slice(0, 3), a.slice(0 - 3)) 会导致不同的结构:[[...], [...]]

      有关apply 的更多信息,请参阅Function.prototype.apply 的文档

      【讨论】:

        【解决方案3】:

        我理解你。一些较旧的 JS 数组函数非常愚蠢。它们不会像 push() 那样返回您想要的东西,它返回结果数组的长度,而不是返回对结果数组的引用。有时我想删除一个项目并同时将结果数组作为参数传递给函数。这就是你的问题所在。我有一个数组

        var arr = [1,2,3,4,5,6,7,8,9];
        

        我想删除第 5 项并将数组作为参数传递。假设 i 是 4。

        myRecursiveFunction(arr.splice(i,1));
        

        不会删减。愚蠢的事情是将数组中已删除的元素传递给函数,而不是对调用的数组的引用。但我不想做几条指令。我只想将它作为单个指令的返回值传递给函数。所以我必须想出类似的发明。

        myRecursiveFunction(arr.slice(0,i).concat(arr.slice(i+1)));
        

        任何有更好想法的人请告诉我。

        【讨论】:

          猜你喜欢
          • 2018-02-28
          • 2020-11-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-10
          • 2017-01-23
          • 2016-03-27
          相关资源
          最近更新 更多