从数组中删除元素的最佳方法: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中有一个黑客程序。jQuery
inArray
方法无论如何都可以使用,但您需要使用该库。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);