2016-05-31 167 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