【问题标题】:add and remove specific array elements using array.splice()使用 array.splice() 添加和删除特定的数组元素
【发布时间】:2018-05-05 06:23:55
【问题描述】:

是否可以添加到数组的特定部分,然后删除数组的特定部分,在这种情况下,使用arr.splice() 的最终值?

我现在这样做:

var arr = [1,2,3,4,5,6,7,8,9];
arr.splice(0,0,"test");

应该返回:

"test",1,2,3,4,5,6,7,8,9

然后我做:

arr.pop();

应该返回:

"test",1,2,3,4,5,6,7,8

我想知道是否可以通过 arr.splice() 方法来做到这一点,或者是否有任何更清洁的方法可以做到这一点,因为我可能会这样做几次,所以我最终会得到类似的东西:

arr.splice(0,0,"test");
arr.pop();
arr.splice(1,0,"test2");
arr.pop();

查看array.splice 文档,它表明我只能删除要放入新元素的位置的元素,而不是另一个元素。

【问题讨论】:

  • 您为什么要使用splice 这样做?你想达到什么目的?
  • 简短的回答是否定的,但.pop() 是一个O(1) 操作,所以我不确定是否有必要尝试将其浓缩为一个语句。
  • 您可以在不添加带有拼接的项目的情况下获取项目(如果需要)。但是pop作为操作更容易。
  • @NinaScholz 我认为 OP 想要在 1 个命令中添加一个项目以及删除最后一个项目,据我所知这是不可能的
  • 要在开始时添加值,您可以使用unshift,而不是splice

标签: javascript arrays


【解决方案1】:

回答我在 cmets 中确认的原始问题。使用 splice 方法或可能在 javascript 中的任何其他单个语句在数组中提供单独的索引以插入和删除是不可能的。如果我真的需要,尝试在单个语句中实现这一目标的最佳方法是创建自己的函数,这在大多数情况下似乎会适得其反。

【讨论】:

    【解决方案2】:

    您可以使用Array.from() 在单个调用中设置.length 和数组特定索引的值

    var arr = [1,2,3,4,5,6,7,8,9];
    
    arr = Array.from({length:arr.length - 1, ...arr, 0:"test"});
    
    console.log(arr);

    要实现问题中描述的模式,您也可以使用循环和Object.assign()

    var arr = [1,2,3,4,5,6,7,8,9];
    var n = 0;
    var prop = "test";
    while (arr.length > 1) {
      Object.assign(arr, {length:arr.length -1,...arr, [n]:!n ? prop : prop+n});
      ++n;
      console.log(arr);
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 2022-01-23
      • 2017-01-30
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      相关资源
      最近更新 更多