从JavaScript数组中删除对象?

42

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

具体而言,我有一个如下所示的数组:

var arr = [
    {url: 'link 1'},
    {url: 'link 2'},
    {url: 'link 3'}
];

现在你想要删除有价值的元素url"link 2",删除后只保留以下数组:

arr = [    {url: 'link 1'},    {url: 'link 3'}];

那么谁可以帮我解决这个问题?非常感谢。


4
我认为这不是那个问题的直接副本。在另一个问题中,仅使用了原始值。 indexOf 在这里将不起作用。因此,除非索引(始终)已知,否则使用splice会少了一部分拼图... - user166390
我已经多次看到这个问题了。 - Derek 朕會功夫
arr.filter(function(element){ return(element.url === 'link 2'? false :true); }) - Manoj
变量 arr = [ {url: "链接1"}, {url: "链接2"}, {url: "链接3"} ];arr = arr.filter(function(el){ return el.url !== "链接2"; }); - Ali NajafZadeh
2个回答

35

你可以使用过滤器。

var arr = [
  {url: "link 1"},
  {url: "link 2"},
  {url: "link 3"}
];

arr = arr.filter(function(el){
  return el.url !== "link 2";
});

PS:Array.filter 方法是在 JavaScript 1.6 中实现的,被大多数现代浏览器支持。如果需要支持旧的浏览器,你可以自己编写一个。


3
请包含这些要求…并不是每个人都有这样的功能(没有垫片) - user166390
非常完美,帮了我很多! - Muhammed Moussa

4
使用splice函数从数组中删除一个元素:
arr.splice(1, 1);

如果你想根据元素的属性删除数组中的一个元素而不知道索引,那么你需要遍历数组中每个元素的属性:

for(var a = 0; a < arr.length; a++) {
    for(var b in arr[a]) {
        if(arr[a][b] === 'link 2') {
            arr.splice(a, 1);
            a--;
            break;
        }
    }
}

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