2012-09-12 60 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