从关联数组中删除值

49

可能是重复问题:
从JavaScript数组中删除特定元素?

我有一个数组,想要从中删除一个值。

考虑这个数组

[ 'utils': [ 'util1', 'util2' ] ]

现在我只想删除util2。 我该怎么做呢? 我尝试使用delete,但它不起作用。

有人可以帮帮我吗?


2
如果这是一个对象字面量,周围的方括号应该是花括号。 - David G
我看不到关联数组。 - Bergi
变量对象 = { 'utils': [ 'util1', 'util2' ] }object.utils.splice(1, 1); - Ali NajafZadeh
3个回答

13

使用splice方法:

var object = { 'utils': [ 'util1', 'util2' ] }

object.utils.splice(1, 1);

如果您不知道数组元素的确切位置,那么需要遍历数组并从中剪切该元素。尝试以下方法:

for (var i = object.utils.length; i--;) {
    var index = object.utils.indexOf('util2');

    if (index === -1) break;

    if (i === index) {
        object.utils.splice(i, 1); break;
    }
}

更新:techfoobar的回答似乎比我的更符合惯用语。考虑使用他的回答。


1
Darin 想说,如果元素的顺序不同会怎样。这个问题的答案已经在它的重复问题中回答了。 - Felix Kling
是的,那就是我的意思。这个解决方案只适用于一些非常特殊的情况。 - Darin Dimitrov
@DarinDimitrov 很好的问题。我认为你需要循环。 - David G
@techfoobar,在这种情况下,你有什么替代建议? - David G
@David - 除非数组中有多个具有相同值(需要删除)的项,否则您只需执行一次 indexOf() 并从其返回的索引处进行剪切。 - techfoobar
显示剩余6条评论

5
您可以使用 Array.splice() 结合 Array.indexOf() 来获得所需的行为,而不必遍历数组:
var toDelete = object.utils.indexOf('util1');
if(toDelete != -1) {
    object.utils.splice(toDelete, 1);
}

0

我认为在Javascript中没有所谓的关联数组。实际上,它是一个对象。

[ 'utils': [ 'util1', 'util2' ] ]

对于这行代码,我认为它无法编译通过。你应该改成这样写。

var obj = { 'utils': [ 'util1', 'util2' ] }

因此,要从数组中删除元素“util2”(内部数组),有两种方法。

  1. 使用pop()

    obj["utils"].pop(); // obj["utils"]用于访问对象的"属性",而不是关联数组中的元素
    
  2. 减少长度

    obj["utils"].length --;
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接