2017-06-29 22 views
0

那裏嗨,jQuery的磁盤陣列和對象,拼接工作不正常

我有我的頁面上的陣列。在這個數組中,我點擊它後插入一個對象。但是,我似乎有問題從數組中刪除它。這很奇怪,因爲完全相同的代碼似乎適用於另一個數組:它確實移除了該對象。我通過索引刪除對象:

代碼在我的JS文件的頂部。

var f__packages = []; 

單擊時,插入作爲Array對象。

var packages = {}; 
    for (var i = 0; i < results.length; i++) { 
     packages['obj'] = results[i].id; 
    } 
f__packages.push(packages); 

直到這裏,它工作正常。它在我的數組中插入一個對象。但是現在來了棘手的部分。當我再次點擊它時,該對象應該從數組中移除。

var index__pid = f__packages.findIndex(y => y.obj==value); 
console.log(index__pid); 
f__packages.splice(index__pid, index__pid); 

它確實找到了正確的索引,有時它會從數組中刪除具有該索引的對象。但是,並不總是如此。它似乎與數組中最後一個對象的問題最多。當沒有更多(也索引:0)時,它失敗。

我在這裏做錯了什麼?

+0

爲什麼如果只有一個屬性('obj')在對象中的循環? 「點擊」的部分是一樣的:'f__packages.push({「OBJ」:結果[results.length - 1]} .ID)' – Andreas

+0

@Andreas由於存在更多的循環,但是我除去這便於閱讀目的。它將剩下的添加到另一個數組中。 – Synthiatic

+0

的'.splice(index__pid,index__pid)'使沒有太大意義......的語法是:'方法Array.splice(開始,* deleteCount *)',因此你要移除'從開始index__pid'元素'index__pid' – Andreas

回答

0

這條線是錯誤的:

f__packages.splice(index__pid, index__pid); 

更改爲:

f__packages.splice(index__pid, 1); 

Array.prototype.splice()

splice()方法通過去除現有的元素改變的數組的內容和/或添加新元素。

語法

array.splice(start)
array.splice(start, deleteCount)
array.splice(start, deleteCount, item1, item2, ...)

start
索引中開始改變陣列(原點0)。如果大於數組的長度,實際的起始索引將被設置爲數組的長度。如果爲負值,則會從數組末尾開始計算許多元素(原點1),並且如果絕對值大於數組長度,則會將其設置爲0。

deleteCount(可選)
一個整數,指示老的數組元素,除去的數量。如果deleteCount爲0,則不刪除任何元素。在這種情況下,您應該至少指定一個新元素。如果deleteCount大於數組中剩餘的元素的數量,那麼數組末尾的所有元素都將被刪除。 如果deleteCount被省略,或者,如果其值大於array.length - start較大,那麼所有的元素與通過陣列的端部開始索引上開始將被刪除。

item1, item2, ...(可選)
元素添加到陣列中,起始索引在開始。如果你沒有指定任何元素,splice()只會從數組中刪除元素。