Javascript 接头不会从阵列中删除图元

Javascript 接头不会从阵列中删除图元,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,编辑 嗯,这确实令人尴尬。谢谢大家注意到这个拼写错误,我本想删除这个问题,但我不能(因为它有答案)。让这成为一座纪念碑吧 我正在尝试编写一个应用程序,在给定一个对象和一个数组的情况下,将该对象从数组中删除(如果存在),或者将其添加到数组中(如果不存在) 初始数组: var permissions = [{ id: 3, name: "Perm3" }, { id: 1, name: "Perm1" }]; triggerPer

编辑

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

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

初始数组:

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;
  };
添加\删除功能:

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;
  };
辅助功能:

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;
  };
Array.prototype.indexOfById=函数(obj){
var-idx=-1;
for(var i=0;i
如图所示,我正在尝试在AngularJS应用程序中使用此选项,并使用复选框作为触发器。有些权限是通过
splice
返回的(但权限数组没有更改),有些甚至没有返回。我在这里遗漏了什么?

您的代码使用的是,不是

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


splice
是您所追求的方法,它可以在适当的位置修改阵列。

正是meagar所说的。切片将获取数组的一部分,但保持数组不变。Splice实际上会“剪接”一些内容。

如果你发布的答案没有给已经发布的另一个答案添加任何内容,只需删除重复的答案。如果你阅读我发布的内容,你就会意识到我添加了一个解释。由于我还不能添加评论,我发布了另一个答案。