我找到了两种方法。哪一个更好?有没有其他方法比这两个更好?从数组中删除元素的最佳方式:javascript/jquery
myArray.splice($.inArray(id, myArray),1);
或
myArray.splice(myArray.indexOf(id),1);
我找到了两种方法。哪一个更好?有没有其他方法比这两个更好?从数组中删除元素的最佳方式:javascript/jquery
myArray.splice($.inArray(id, myArray),1);
或
myArray.splice(myArray.indexOf(id),1);
既不选择是安全因为这两个无线如果没有找到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。
清空整个阵列:
while (myArray.length) {
var element = myArray.shift();
element = null; // free memory
}
myArray = [];
或删除单个元件:
var element = myArray.splice(id,1);
element = null; // free memory
您也可以使用以下方法从数组中删除元素。
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中工作。
如果在数组中找不到要删除的项目,或者存在其他对原始数组的引用,则两种方法的结果不会相同。 – nnnnnn
'indexOf'可能不适用于某些浏览器。但是,MDN中存在一些问题。 jQuery'inArray'方法无论如何都可以工作,但你需要使用库。 – VisioN
indexOf方法不适用于像IE 7/8这样的旧版浏览器,而$ .inArray是一个普通的循环,因此适用于每个浏览器 – Sushil
@VisioN你应该给你的评论作为答案,兄弟! – thecodeparadox