splice不会从数组中删除元素

时间:2016-05-31 16:50:48

标签: javascript arrays angularjs

修改

嗯,这确实令人尴尬。谢谢大家注意到错字,我会删除这个问题,但我不能(因为它有答案)。让这成为一座纪念碑。

我正在尝试编写一个应用程序,给定一个对象和一个数组,从数组中删除该对象(如果存在),或将其添加到数组中(如果它不存在)。

初始数组:

var permissions = [{
      id: 3,
      name: "Perm3"
    }, {
      id: 1,
      name: "Perm1"
    }];

添加\删除功能

  triggerPermission = function(perm) {
    var idx = permissions.indexOfById(perm);
    if (idx === -1) {
      permissions.push(perm);
    } else {
      permissions.slice(idx, 1); //should have been SPLICE...
    }
  };

辅助功能:

 Array.prototype.indexOfById = function(obj) {
    var idx = -1;
    for (var i = 0; i < this.length; i++) {
      if (this[i].id === obj.id) {
        idx = i;
        break;
      }
    }
    return idx;
  };

plunkr可以看出,我试图在AngularJS应用程序中使用它,复选框作为触发器。某些权限由splice返回(但权限数组未被更改),有些权限甚至没有返回。我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

您的代码使用slice splice

slice不修改数组,它返回修改后的副本。

splice是您正在使用的方法,可以就地修改数组。

答案 1 :(得分:-3)

正是梅加尔所说的。切片将占用阵列的一部分但保持阵列不变。 Splice实际上会“拼接”某些东西。