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

IT技术 javascript arrays
2021-03-21 19:48:27

如何从数组 foo 中删除键“bar”,以便“bar”不会出现在

for(key in foo){alert(key);}
6个回答

不要使用delete ,因为它不会从数组中删除元素,它只会将其设置为未定义,然后不会正确反映在数组的长度中。

如果您知道密钥,您应该使用splice

myArray.splice(key, 1);

对于史蒂文这样的人,你可以尝试这样的事情:

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);
    }
}
+1 好点,我也喜欢这种方式:ejohn.org/blog/javascript-array-remove
2021-04-27 19:48:27
使用for (var key in myArray)代替for (key in myArray)- 否则key是一个全局变量,如果您在该循环内调用具有相同问题的函数,您将得到意想不到的结果。
2021-04-27 19:48:27
@ThiefMaster - 想解释一下吗?我不知道这意味着什么,并渴望学习。与往常一样,编辑比临时评论好 1,000,000 倍;你应该知道,你有多少代表。
2021-05-03 19:48:27
2021-05-04 19:48:27
请注意,如果数组在一行中有多个匹配“bar”的项目,则第二个示例不起作用。数组的索引将发生变化,您将错过拼接一半的项目。相反,使用 for 循环在找到匹配项时递减索引。
2021-05-12 19:48:27
delete foo[key];

:D

使用 delete foo[key] 就错了;应该使用 foo.splice(key, 1);
2021-04-25 19:48:27
实际上,如果您通过 delete foo[key] 从索引数组中删除,它会将值存储在 foo[key]=undefined 中,而 foo.length 将保持不变,这是错误的。所以改用 SPLICE
2021-05-01 19:48:27
键=“栏”;eval("删除foo."+key); 隐藏;D
2021-05-05 19:48:27
从技术上讲,这并不能回答问题。他正在寻找删除关键的“酒吧”。而您的关键变量并不意味着这一点。:P
2021-05-17 19:48:27
千万不要使用eval删除对象/数组的键/索引可以通过更简单的方法来实现,不使用eval.
2021-05-19 19:48:27

如果您知道密钥名称,只需这样做:

delete array['key_name']
这不是数组!它是一个对象(是的,这些在 JS 中被称为关联数组,但不,它们不是真的,如果你真正使用 JS 数组,这种方法是有害的)。
2021-05-16 19:48:27

一个重要的注意事项:JavaScript 数组不是像您可能在 PHP 中习惯的那样的关联数组。如果您的“数组键”是字符串,则您不再操作数组的内容。您的数组是一个对象,您使用方括号表示法访问名为 <key name> 的成员。因此:

var myArray = [];
myArray["bar"] = true;
myArray["foo"] = true;
警报(myArray.length);// 返回 0。

因为您还没有向数组添加元素,所以您只修改了 myArray 的 bar 和 foo 成员。

这就是我要做的

 myArray.splice( myArray.indexOf('bar') , 1) 
Array.prototype.indexOf() 方法搜索数组中的值,而不是键。所以这是行不通的。
2021-04-23 19:48:27