从数组中删除元素的最佳方法:javascript/jquery
我找到了两种方法。哪一个更好?还有比这两个更好的方法吗从数组中删除元素的最佳方法:javascript/jquery,javascript,jquery,Javascript,Jquery,我找到了两种方法。哪一个更好?还有比这两个更好的方法吗 myArray.splice($.inArray(id, myArray),1); 或 清空整个阵列: while (myArray.length) { var element = myArray.shift(); element = null; // free memory } myArray = []; 或删除单个元素: var element = myArray.splice(id,1); element = null;
myArray.splice($.inArray(id, myArray),1);
或
清空整个阵列:
while (myArray.length) {
var element = myArray.shift();
element = null; // free memory
}
myArray = [];
或删除单个元素:
var element = myArray.splice(id,1);
element = null; // free memory
两个选项都不安全,因为如果找不到
id
,这两个选项都将从数组中删除最后一个元素
无论您使用$.inArray()
还是.indexOf()
如果id
不在数组中,都会返回-1
,当您将-1
传递给时,它将从数组中删除最后一项
所以你真的应该说:
var index = $.inArray(id, myArray); // or myArray.indexOf(id)
if (index > -1) myArray.splice(index, 1);
显然,如果需要,您可以将上述内容封装在自己的函数中
至于
$.inArray()
和.indexOf()
中哪一个更好,这取决于您是否关心支持不支持.indexOf()
的旧浏览器(主要是IE8及以下版本)。你应该注意你的代码是否在公共网站上,因为很多人仍然使用IE8和IE7。如果您已经在使用jQuery,那么最好还是坚持使用$.inArray()
,否则请使用。您也可以使用以下方法从数组中删除元素
var y = [1, 2, 3]
var removeItem = 2;
y = jQuery.grep(y, function(value) {
return value != removeItem;
});
或
以上两种方法都是最好的
注意:IE<9不支持数组上的.indexOf()。如果您想确保代码在IE中工作。
indexOf
在某些浏览器中可能无法工作。然而,在MDN中有一个黑客程序。jQueryinArray
方法无论如何都可以使用,但您需要使用该库。indexOf方法在IE 7/8和$等较旧的浏览器上不起作用。inArray是一个普通的循环,因此在所有浏览器中都可以使用browser@VisioN你应该给出你的评论作为回答,兄弟!如果所讨论的数组元素是在其他地方引用的对象,并且如果数组元素没有在其他地方引用,那么您的element=null
概念不会释放内存,您的方法比仅myArray.shift()
或myArray.splice()更好吗
单独在一行上?OP没有说元素可能在别处被引用,或者它可能是一个对象。我们掌握的所有信息都是一个单行问题。一个更好的书面问题会有更好的答案。没有争斗,很抱歉给人这样的印象,只是一个严肃的问题,我真的很想得到一个严肃的答案:为什么你的element=null
东西会释放内存?如果根本不使用元素
变量,为什么不通过myArray.splice(id,1)
释放内存?你能解释一下区别吗?如果在数组中找不到要删除的项,或者存在对原始数组的其他引用,那么这两个方法的结果就不一样了。@nnnnnn谢谢bro。我将使用$.inArray。注意:调用此代码的函数仅在数组包含该元素时被调用:-)。所以不需要检查。但是接得好。
var y = [1, 2, 3]
var removeItem = 2;
y = jQuery.grep(y, function(value) {
return value != removeItem;
});
var arr = ["jQuery","JavaScript","HTML","Ajax","Css"];
var itemtoRemove = "HTML";
arr.splice($.inArray(itemtoRemove, arr),1);