【问题标题】:JS .splice returns removed items in array not by itselfJS .splice 不是单独返回数组中已删除的项目
【发布时间】:2019-07-30 07:11:56
【问题描述】:

希望我能理解这一点。

Array.splice 函数返回一个包含所有已删除元素的数组。

在我的代码中,我一次只删除一个元素,但我需要存储已删除的项目。

我正在这样做:

let toRem = $(this).closest("li");  

let temp = list.splice(toRem.index(), 1);
compList.push(temp[0]);
compList[compList.length - 1].completed = new Date;

toRem.remove();

添加临时数组似乎很浪费,但我看不到另一种方法来做到这一点。我知道这是否是一件我不应该关心的小事,但如果可能的话,我想把它做得更好。

【问题讨论】:

    标签: javascript jquery arrays


    【解决方案1】:

    嗯,这完全取决于您所说的更好是什么意思。有可读性,通常(但不总是)更冗长,即你现在拥有的,然后让代码尽可能短。

    如果您对 temp 变量有疑问,则无需使用它:

    compList.push(list.splice(toRem.index(), 1)[0]);
    

    然后您可以通过减少对接头大小的依赖来改进这一点:

    compList.push(...list.splice(toRem.index(), 1));
    

    .push 可以接受任意数量的输入,并且展开 (...) 运算符会将数组拆分为数组中每个项目的输入。

    或者,如果您知道总是只会拼接一个元素,则可以将所有三行组合起来:

    compList.push({ ...list.splice(toRem.index(), 1)[0], completed: new Date() });
    

    正如您所见,随着每个版本在某一方面变得更短或“更好”,它就会失去可读性。

    【讨论】:

    • 第一个对我有好处。我想我忘记了那个功能。我什至不知道传播操作。谢谢。
    【解决方案2】:

    你应该能够合并这些行:

    compList.push(list.splice(toRem.index(), 1)[0]);
    

    或者如果你不想这样做,你可以使用解构:

    let [temp] = list.splice(toRem.index(), 1);
    compList.push(temp);
    

    【讨论】:

      猜你喜欢
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 2019-09-06
      相关资源
      最近更新 更多