2011-05-01 101 views
2

我有一個array = []它包含對象... obj, obj, obj。我必須刪除obj two,但我不知道索引...所以我如何刪除obj。對象的名稱也是相同的。從陣列中刪除對象

回答

4

我希望它可以幫助你:

function removeByElement(array,obj) { 
    for(var i=0; i<array.length;i++) { 
    if(array[i]==obj) { 
     array.splice(i,1); 
     break; 
    } 
    } 
} 

編輯: 破環。

+0

這應該真的使用'===' – Alnitak 2011-05-01 19:24:34

+0

哦,如果您有兩個或多個連續的匹配元素,它會失敗。 – Alnitak 2011-05-01 19:28:47

+0

這是一個不好的方法。如果你刪除一個項目,那麼你會跳過'i ++'的下一個項目。一旦你刪除了一個項目,或者以相反的順序遍歷數組,則可以中斷。 – 2011-05-01 19:34:23

1
function removeObject(obj, arr) { 
    for (var i = 0; i < arr.length; i++) { 
    if (arr[i] === obj) { 
     arr.splice(i, 1); 
     break; 
    } 
    } 
} 
1

,如果你不知道該索引,你必須遍歷所有元素,並檢查每個如果他們是一個你看,然後delete它。

var len = your_array.length; 
for(var i=0; i<len;i++){ 
    if(typeof(your_arry[i])=='classOfTypeYouLookFor'){// OR if(your_array[i].property_of_class && your_array[i].property_of_class==some_specific_value){ 
     delete(your_arry[i]); 
    } 
} 
+1

這會在陣列中留下一個洞 – 2011-05-01 19:20:57

+0

可能是我誤解了這個問題 – 2011-05-01 19:21:38

4

的ES5的方式來做到這一點是Array.filter

myarray = myarray.filter(function(val, index, a) { 
    return (val !== obj); 
}); 

見上面,如果你沒有ES5版本使用鏈接的頁面MDN。

從技術上講,這會創建一個新的數組,而不是修改原始數組。然而,在其他答案中提出的splice並不是特別有效,因爲它必須對每個匹配元素上方的所有索引重新編號,並且如果有多個匹配則會反覆進行。