按值从数组中删除项目

Ale*_*rin 9 javascript arrays each jquery

我有一系列的项目,如:

var items = [id: "animal", type: "cat", cute: "yes"]
Run Code Online (Sandbox Code Playgroud)

我正在尝试删除任何与给定ID相匹配的项目.在这种情况下;animal

我被卡住了!我可以通过使用更简单的数组来轻松地工作但这不是我需要的...我还需要按值删除项目,因为我不希望通过索引引用项目的麻烦.

有没有我可以使用的jQuery方法,我不需要遍历items数组,而是指定一个选择器?

这是我的jsFiddle:http://jsfiddle.net/zafrX/

Ada*_*kis 22

我不确定通过索引引用数组项有多麻烦.删除数组项的标准方法是使用splice方法

for (var i = 0; i < items.length; i++)
    if (items[i] === "animal") { 
        items.splice(i, 1);
        break;
    }
Run Code Online (Sandbox Code Playgroud)

当然,您可以将其概括为辅助函数,因此您无需在任何地方复制此函数.


编辑

我刚注意到这个错误的语法:

var items = [id: "animal", type: "cat", cute: "yes"]
Run Code Online (Sandbox Code Playgroud)

你想要这样的东西:

 var items = [ {id: "animal",  type: "cat", cute: "yes"}, {id: "mouse",  type: "rodent", cute: "no"}];
Run Code Online (Sandbox Code Playgroud)

这会将删除代码更改为:

for (var i = 0; i < items.length; i++)
    if (items[i].id && items[i].id === "animal") { 
        items.splice(i, 1);
        break;
    }
Run Code Online (Sandbox Code Playgroud)


Cht*_*lek 7

不需要jQuery或任何第三方lib,现在我们可以使用新的ES5过滤器:

let myArray = [{ id : 'a1', name : 'Rabbit'}, { id : 'a2', name : 'Cat'}];
myArray = myArray.filter(i => i.id !== 'a1');
Run Code Online (Sandbox Code Playgroud)


Mil*_*eri 6

您可以splice自己使用或运行删除.这是一个例子:

for (var i = 0; i < items.length; i ++) {
    if (items[i] == "animal") { 
        items.splice(i, 1);
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)


Pla*_*nox 5

有一个简单的方法!

myItems.splice(myItems.indexOf(myItems.find(row => row.id == id)), 1);
Run Code Online (Sandbox Code Playgroud)

演示如下:

myItems.splice(myItems.indexOf(myItems.find(row => row.id == id)), 1);
Run Code Online (Sandbox Code Playgroud)