2017-01-23 51 views
0

我需要一個幫助。我需要使用JavaScript根據某些條件從數組中刪除行。我解釋我下面的代碼:無法使用Javascript/Jquery從數組中刪除行

var arr = [{ 
     'value': '', 
     'name': 'Rajeev' 
     }, { 
     'value': '1', 
     'name': 'Raj' 
     }, { 
     'value': '', 
     'name': 'Ram' 
     }]; 


for(var i=0;i<arr.length;i++){ 
    if(arr[i]['value']==''){ 
     arr.splice(i,1); 
    } 
} 

這裏的任何值刪除數組索引正在發生變化,因此不能在任何條件下正確刪除後。我需要刪除其行號爲value ==''的行。請幫幫我。

+2

似乎做工精細返回值。 –

回答

0

它將跳過元素,因爲刪除元素將更改索引,但是您沒有更新i的值。以相反的順序進行操作以避免這些問題,即結束開始。

var i = arr.length; 

while(i--){ 
    if(arr[i]['value']==''){ 
     arr.splice(i,1); 
    } 
} 
+1

@Satpal:thanks mate :) –

1

您可以從結尾迭代,因爲Array#splice減少了數組的長度。

在你的代碼中,如果你拼接,你必須保持索引在相同的索引,而不增加。

for (var i = arr.length - 1; i >= 0; i--){ 
    if (arr[i]['value'] == '') { 
     arr.splice(i, 1); 
    } 
} 
0

如何創建新陣列,並稱不「」的項目,並與新老交替?用下面的代碼替換你的循環,看看它是否有效。

var newArr = []; 

for (var i = 0; i < arr.length; i++) { 
    if (arr[i]['value'] !== '') { 
     newArr.push(arr[i]); 
    } 
} 
arr = newArr; 

小提琴:https://jsfiddle.net/sno3pphs/

0

不會工作,因爲你的陣列的lenth當你刪除一個元素是動態變化。你必須減少i變量。嘗試:

var arr = [{ 
     'value': '', 
     'name': 'Rajeev' 
     }, { 
     'value': '1', 
     'name': 'Raj' 
     }, { 
     'value': '', 
     'name': 'Ram' 
     }]; 


for(var i=0;i<arr.length;i++){ 
    if(arr[i]['value']==''){ 
     arr.splice(i,1); 
     i--; 
    } 
} 
1
arr = arr.filter(element => element.value != '') 
+1

最好是將它設置爲'arr',就像'arr = arr.filter(element => element.value!='')' – Doruk

+0

感謝您指出@Doruk數組.filter創建一個新的數組對象,並填充滿足給定謂詞的元素。我已經編輯了我的答案,因爲海報想要永久地去除這些元素。 – Dagohan

0

你正在改變數組的大小,但不斷增加的指數,如果你想改變數組的大小在運行環路,同時建議您使用

for each (var item in arr) { 
if(item.val==''){ 
     arr.splice(item ,1); 
     i--; 
    } 

可以用做一個更有效的方式像this

array = arr.filter(function(currentChar) { 
    return currentChar !== " "; 
}); 
0

lodash可以篩選出來容易

的第一個參數將是您的陣列和功能,無需'

var fArray = _.remove(arr, function(obj) { 
return (obj.value != ''); }); 

fArray將與價值不是你想要的陣列「」