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

Ste*_*ble 131 javascript arrays

如何从数组foo中删除键"bar",以便"bar"不会显示在其中

for(key in foo){alert(key);}
Run Code Online (Sandbox Code Playgroud)

goi*_*ing 229

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

如果你知道钥匙你应该使用拼接

myArray.splice(key, 1);
Run Code Online (Sandbox Code Playgroud)

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

for (var key in myArray) {
    if (key == 'bar') {
        myArray.splice(key, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

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

  • 使用`for(myArray中的var键)`而不是`for(myArray中的键)` - 否则`key`是一个全局变量,如果你在该循环中调用一个具有相同问题的函数,你将得到意想不到的结果. (21认同)
  • +1好点,我也喜欢这样:http://ejohn.org/blog/javascript-array-remove/ (3认同)
  • @ThiefMaster - 关心解释?我不知道这意味着什么,并且热衷于学习.与往常一样,编辑比现有评论好100万倍; 你应该知道你拥有的代表数量. (3认同)
  • 请注意,此代码泄漏了全局`key`. (2认同)
  • 注意,如果数组中的多个项目与"bar"匹配,则第二个示例不起作用.数组的索引将会移动,您将错过拼接一半的项目.相反,使用for循环,在找到匹配项时递减索引. (2认同)

小智 51

delete foo[key];
Run Code Online (Sandbox Code Playgroud)

:d

  • 从技术上说,这不回答问题.他正在寻找关键的"酒吧".而你的关键变量并不意味着这一点.:P (4认同)
  • 键="酒吧"; eval("删除foo."+键);*隐藏*; D. (4认同)
  • 实际上,如果你通过delete foo [key]从索引数组中删除它会将值存储在foo [key] = undefined中,而foo.length将保持相同,这是错误的.所以请改用SPLICE (4认同)
  • 做*不*使用'eval`.删除对象/数组的键/索引可以通过更简单的方法来实现,而不使用`eval`. (3认同)

Joh*_*ial 38

一个重要的注意事项:JavaScript Arrays不是那些您可能习惯使用PHP的关联数组.如果"数组键"是一个字符串,则不再对数组的内容进行操作.您的数组是一个对象,并且您使用括号表示法来访问名为<key name>的成员.从而:

var myArray = [];
myArray["bar"] = true;
myArray["foo"] = true;
alert(myArray.length); // returns 0.

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


小智 33

如果您知道密钥名称,请执行以下操作:

delete array['key_name']
Run Code Online (Sandbox Code Playgroud)

  • 这不是阵列!它是一个对象(是的,这些在JS中称为关联数组,但不是,它们不是真的,如果你真的使用JS数组,这个方法是有害的). (2认同)

小智 5

我就是这样做的

 myArray.splice( myArray.indexOf('bar') , 1) 
Run Code Online (Sandbox Code Playgroud)