2012-09-12 87 views
1

我找到了兩種方法。哪一個更好?有沒有其他方法比這兩個更好?從數組中刪除元素的最佳方式:javascript/jquery

myArray.splice($.inArray(id, myArray),1); 

myArray.splice(myArray.indexOf(id),1); 
+3

'indexOf'可能不適用於某些瀏覽器。但是,MDN中存在一些問題。 jQuery'inArray'方法無論如何都可以工作,但你需要使用庫。 – VisioN

+0

indexOf方法不適用於像IE 7/8這樣的舊版瀏覽器,而$ .inArray是一個普通的循環,因此適用於每個瀏覽器 – Sushil

+0

@VisioN你應該給你的評論作爲答案,兄弟! – thecodeparadox

回答

2

既不選擇是安全因爲這兩個無線如果沒有找到id,則從數組中刪除最後一個元素。

無論您使用$.inArray().indexOf()你會得到-1如果id不是陣列中的回報,當你通過-1.splice() method它將從數組中刪除最後一個項目。

所以真的,你應該說:

var index = $.inArray(id, myArray); // or myArray.indexOf(id) 
if (index > -1) myArray.splice(index, 1); 

顯然,如果需要的話,你可以封裝在上面你自己的函數。

至於其中的$.inArray().indexOf()較好,這取決於你是否關心支持舊的瀏覽器(IE8主要是以下)不支持.indexOf()。你應該如果你的代碼是在公共網站上,因爲很多人仍然使用IE8和IE7。如果你已經使用jQuery,你可以堅持使用$.inArray(),否則使用.indexOf() shim at MDN

+0

+1指出真正的問題:D – Esailija

+0

@nnnnnn感謝兄弟。我將使用$ .inArray。 P.S:這個代碼被調用的函數只在數組有這個元素時才被調用:-)。所以不需要檢查。但很好的捕獲。 – jason

0

清空整個陣列:

while (myArray.length) { 
    var element = myArray.shift(); 
    element = null; // free memory 
} 
myArray = []; 

或刪除單個元件:

var element = myArray.splice(id,1); 
element = null; // free memory 
+1

你看過這個問題嗎? – VisioN

+0

是的,爲什麼?你有沒有看過答案? – Marcelo

+0

如果所討論的數組元素是其他地方引用的對象,並且數組元素未在其他地方被引用,那麼'element = null'概念不會釋放空閒內存,您的方法如何比僅僅使用myArray.shift()或myArray .splice()'自己在一行上? – nnnnnn

0

您也可以使用以下方法從數組中刪除元素。

var y = [1, 2, 3] 
var removeItem = 2; 

y = jQuery.grep(y, function(value) { 
    return value != removeItem; 
}); 

OR

var arr = ["jQuery","JavaScript","HTML","Ajax","Css"]; 
var itemtoRemove = "HTML"; 
arr.splice($.inArray(itemtoRemove, arr),1); 

以上兩種方式是最好的。

注意: IE < 9不支持數組上的.indexOf()。如果你想確保你的代碼在IE中工作。

+0

如果在數組中找不到要刪除的項目,或者存在其他對原始數組的引用,則兩種方法的結果不會相同。 – nnnnnn