【问题标题】:Remove first Item of the array (like popping from stack) [duplicate]删除数组的第一项(如从堆栈中弹出)[重复]
【发布时间】:2015-06-18 19:10:46
【问题描述】:

我有通过ng-repeat 创建的项目列表。我也有删除按钮。 单击删除按钮将一项一项删除数组的最后一项。 Plunker

但我想从第一项开始逐项删除。我怎样才能做到这一点?我用它来删除列表项:

  $scope.index = 1;
  $scope.remove = function(item) { 
    var index = $scope.cards.indexOf(item);
    $scope.cards.splice(index, 1);     
  }

有什么办法可以从顶部删除吗?

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

最简单的方法是使用shift()。如果您有一个数组,shift 函数会将所有内容向左移动。

var arr = [1, 2, 3, 4]; 
var theRemovedElement = arr.shift(); // theRemovedElement == 1
console.log(arr); // [2, 3, 4]

【讨论】:

  • 如果您需要遍历整个数组并一次删除一个元素直到数组为空,我建议先反转数组,然后使用pop()而不是shift()作为@987654327 @ 更快shift()。见stackoverflow.com/questions/6501160/…
  • 点赞!假设我想在任何时间点保留一个包含 1000 个元素的数组,并且我每秒左右不断添加新数据,在这种情况下转换的效率如何
  • @AlexanderJank 但是如果数组是[1,2,3,a,b,c]
【解决方案2】:

Plunker

$scope.remove = function(item) { 
    $scope.cards.splice(0, 1);     
  }

对 .. 进行了更改,现在它将从顶部移除

【讨论】:

  • 感谢您指出这一点。如果起点是 0 则从顶部开始
【解决方案3】:

有一个函数叫做shift()。 它将删除数组的第一个元素。

有一些不错的documentation and examples

【讨论】:

    【解决方案4】:

    只需使用arr.slice(startingIndex, endingIndex)

    如果不指定endingIndex,则返回从提供的索引开始的所有项目。

    在你的情况下arr=arr.slice(1)

    【讨论】:

    • 我更喜欢这个slice(),因为slice() 不会像shift()splice() 那样具有侵入性并且不会改变值本身。参照。 var a = [1, 2, 3] var b = a.shift() a //(2) [2, 3] b //1
    • 两种方法都有不同的用例。
    • 另一个优点是链接:[1, 2, 3].slice(1).doSomethingWithTwoAndThree()
    • 完美。 .shift() 不适用于 map(), slice 可以。 :D
    【解决方案5】:
    const a = [1, 2, 3]; // -> [2, 3]
    
    // Mutable solutions: update array 'a', 'c' will contain the removed item
    const c = a.shift(); // prefered mutable way
    const [c] = a.splice(0, 1);
    
    // Immutable solutions: create new array 'b' and leave array 'a' untouched
    const b = a.slice(1); // prefered immutable way
    const b = a.filter((_, i) => i > 0);
    const [c, ...b] = a; // c: the removed item
    

    【讨论】:

    • 完美的指导,谢谢!
    猜你喜欢
    • 2015-05-24
    • 2021-08-02
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    相关资源
    最近更新 更多