2016-05-31 94 views
1

编辑拼接不从阵列

能很好地去除元素,这确实是令人尴尬的。谢谢大家注意到错字,我会删除这个问题,但我不能(因为它有答案)。让这是一座纪念碑。我想写一个应用程序,给定一个对象和一个数组,如果它存在),或者将其添加到数组(如果它不存在),从数组中删除对象。

初始阵列:

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(但权限数组没有被更改),有些甚至没有被返回。我在这里错过了什么?

回答

1

您的密码使用slice,不是splice

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

splice是您正在修改阵列的方法。

-3

meagar说的是什么。切片将占用数组的一部分,但不改变数组。拼接实际上会“拼接”某些东西。

+0

如果您发布的答案对已发布的其他答案没有任何意义,只需删除重复的答案即可。 – ShadowRanger

+0

如果你会阅读我发布的内容,那么你会意识到我添加了一个解释。由于我无法添加评论,我发布了另一个答案。 – Steven