如何在JavaScript中取消设置数组中的元素?


Answers:


243

不要使用delete,因为它不会从数组中删除元素,只会将其设置为undefined,这将无法在数组的长度中正确反映出来。

如果您知道密钥,则应使用拼接,

myArray.splice(key, 1);

对于处于史蒂文(Steven)职位的人,您可以尝试以下操作:

for (var key in myArray) {
    if (key == 'bar') {
        myArray.splice(key, 1);
    }
}

要么

for (var key in myArray) {
    if (myArray[key] == 'bar') {
        myArray.splice(key, 1);
    }
}

3
+1好点,我也喜欢这种方式:ejohn.org/blog/javascript-array-remove
CMS

3
@ThiefMaster-关心解释吗?我不知道那意味着什么并且热衷于学习。与往常一样,编辑比临时注释要好一百万倍;您应该知道,有了您的代表数量。
打算

21
使用for (var key in myArray)代替for (key in myArray)-否则key是全局变量,并且如果在该循环内调用具有相同问题的函数,则会得到意外的结果。
ThiefMaster 2011年

2
注意,如果数组中连续有多个与“ bar”匹配的项目,则第二个示例不起作用。数组的索引将移动,您将错过拼接一半的项目。相反,请使用for循环,以在找到匹配项时减少索引。
Dave Lancea 2014年


52
delete foo[key];

:D


4
从技术上讲,这并不能回答问题。他希望删除键“ bar”。而且您的键变量并不暗示这一点。:P
肯(Kon)

4
key ='bar'; eval(“删除foo。” + key); 隐藏; D
olliej

3
千万不要使用eval。可以通过不使用的更简单方法来删除对象/数组的键/索引eval
Dinei 2015年

4
实际上,如果您通过删除foo [key]从索引数组中删除,它将在foo [key] = undefined中存储值,而foo.length将保持不变,这是错误的。所以使用SPLICE代替
ПавелИванов

使用delete foo [key]是错误的;应该使用foo.splice(key,1);
vnguyen

38

重要说明:JavaScript数组不是您可能习惯于PHP的关联数组。如果您的“数组键”是字符串,则您不再需要处理数组的内容。您的数组是一个对象,并且您使用方括号表示法来访问名为<键名>的成员。从而:

var myArray = [];
myArray [“ bar”] = true;
myArray [“ foo”] = true;
alert(myArray.length); //返回0。

因为尚未向数组添加元素,所以仅修改了myArray的bar和foo成员。


37

如果您知道键名,只需执行以下操作:

delete array['key_name']

2
这不是数组!这是一个对象(是的,这些在JS中称为关联数组,但不是,它们不是真的,如果您真的使用JS数组,则此方法有害)。
wintercounter 2014年

3

这就是我会做的

 myArray.splice( myArray.indexOf('bar') , 1) 

1
Array.prototype.indexOf()方法在数组中搜索值,而不是键。所以这行不通。
纳达夫

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.