【问题标题】:How do I unset an element in an array in javascript?如何在javascript中取消设置数组中的元素?
【发布时间】:2010-09-17 10:40:47
【问题描述】:

如何从数组 foo 中删除键 'bar' 以使 'bar' 不会出现在

for(key in foo){alert(key);}

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

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

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

    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);
        }
    }
    

    【讨论】:

    • +1 好点,我也喜欢这种方式:ejohn.org/blog/javascript-array-remove
    • @ThiefMaster - 需要解释一下吗?我不知道这意味着什么,并渴望学习。与往常一样,编辑比临时评论好 1,000,000 倍;你应该知道你拥有的代表数量。
    • 使用for (var key in myArray) 而不是for (key in myArray) - 否则key 是一个全局变量,如果您在该循环中调用具有相同问题的函数,您将得到意想不到的结果。
    • 注意,如果数组在一行中有多个匹配 'bar' 的项目,则第二个示例不起作用。数组的索引会移动,你会错过拼接一半的项目。相反,使用 for 循环在找到匹配项时减少索引。
    【解决方案2】:
    delete foo[key];
    

    :D

    【讨论】:

    • 从技术上讲,这并不能回答问题。他正在寻找删除关键“栏”。而你的关键变量并不意味着这一点。 :P
    • key='bar'; eval("删除 foo."+key); 隐藏 ;D
    • 不要使用eval。可以通过不使用eval 的更简单的方法来删除对象/数组的键/索引。
    • 实际上,如果您通过 delete foo[key] 从索引数组中删除,它会将值存储在 foo[key]=undefined 中,并且 foo.length 将保持不变,这是错误的。所以改用 SPLICE
    • 使用 delete foo[key] 错了;应该使用 foo.splice(key, 1);
    【解决方案3】:

    如果您知道键名,只需这样做:

    delete array['key_name']
    

    【讨论】:

    • 这不是数组!它是一个对象(是的,这些在 JS 中被称为关联数组,但不,它们不是真的,如果你真的使用 JS 数组,这种方法是有害的)。
    【解决方案4】:

    一个重要的提示:JavaScript 数组不是像您在 PHP 中可能习惯的那样的关联数组。如果您的“数组键”是一个字符串,则您不再对数组的内容进行操作。您的数组是一个对象,并且您使用括号表示法来访问名为 的成员。因此:

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

    因为你没有给数组添加元素,你只修改了myArray的bar和foo成员。

    【讨论】:

      【解决方案5】:

      我会这样做

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

      【讨论】:

      • Array.prototype.indexOf() 方法在数组中搜索值,而不是键。所以这行不通。
      【解决方案6】:

      http://www.internetdoc.info/javascript-function/remove-key-from-array.htm

      removeKey(arrayName,key);
      
      function removeKey(arrayName,key)
      {
       var x;
       var tmpArray = new Array();
       for(x in arrayName)
       {
        if(x!=key) { tmpArray[x] = arrayName[x]; }
       }
       return tmpArray;
      }
      

      【讨论】:

        【解决方案7】:

        删除和拼接有一个重要的区别:

        原始数组:

        [, 'one',, '5', ,'nine']

        拼接后(array.splice(1,1)):

        [,'5',,'9']

        删除后(删除数组[1]):

        [ , '5', , '9' ]

        【讨论】:

          猜你喜欢
          • 2021-05-29
          • 2013-04-22
          • 2013-04-11
          • 1970-01-01
          • 2011-02-20
          • 2011-11-02
          • 1970-01-01
          • 2020-03-24
          • 2016-02-09
          相关资源
          最近更新 更多