的forEach被而是意味着所謂的副作用。
你的代碼存在的問題是,你在迭代它時正在改變數組。因此,如果您刪除一個項目,則陣列的所有其他索引將立即重新分配。這就是爲什麼刪除一個項目後,進一步刪除不會做所需的事情(在所需的位置)。
因此forEach對於影響實際數組之外的事物是很好的,這是迭代的。
這對於一個稱爲過濾器的函數來說是一個完美的用例,因爲實際上,您對列表做了什麼:你想過濾掉一些項目。
array = array.filter(function(item, index) {
return (index !== 5 && index !== 2)
}
過濾函數除了函數作爲參數,其本身將被調用的數組中的每個項目。如果該函數對某個項目返回true,則會保留 - 否則將被刪除。這就是爲什麼邏輯表達式必須在這裏稍微改變的原因:它看起來像這樣:保持不是索引5而不是索引2的項目。這些真或假返回函數稱爲謂詞。
如果您想過濾掉更多的索引,該怎麼辦?使用locical運算符的表達式變得很快。
您可以在索引列表上使用數組方法indexOf,每次將數組的當前索引傳遞給索引。如果它不在裏面,它會返回一個位置或-1。在後面的情況下,您希望將該項目保留在數組中。
array = array.filter(function(item, current_index) {
return ([2, 5].indexOf(current_index) === -1)
}
此外,你可以包裝在一個函數:
function removeIndices(array, indices) {
return array.filter(function(item, current_index) {
return (indices.indexOf(current_index) === -1)
})
}
最後:
array = removeIndices(array, [2, 5]);
'user.index' ..? – Rayon
它工作正常..沒有看到記錄的用戶名,請檢查你的filddle中最後記錄的數組。 –
剛剛更新了問題 – gespinha