从json对象中删除特定项

时间:2014-01-15 22:39:39

标签: javascript json

我正在尝试删除json对象列表中的某些项目,这些项目具有特定的组。我的JSON看起来像这样。

var events = [
        {"id":"19","name":"sports","group":"1"},
        {"id":"20","name":"school","group":"2"},
        {"id":"21","name":"fun","group":"1"}
    ]

我试过这个

for(var i in events)
    if(events[i].group == deleted_group)
        events.splice(i, 1);

但问题是,如果我必须删除更多项目,它就会出错。还有另一种简单的方法吗?即使使用underscore.js,我仍然愿意接受消化。

先谢谢你,丹尼尔!

3 个答案:

答案 0 :(得分:1)

试试这个

var events = [
    {"id":"19","name":"sports","group":"1"},
    {"id":"20","name":"school","group":"2"},
    {"id":"21","name":"fun","group":"1"}
]

console.log(_.reject(events, function(event){ return event.group == '1'; }));

答案 1 :(得分:0)

当您使用"拼接"函数从for循环中的数组中删除元素, 您需要在删除项目时移回当前索引,因为数组已重新编制索引。

另外看一下数组函数,例如" filter"为了更方便,请在MDN上阅读更多内容。

答案 2 :(得分:0)

您可以使用delete运算符删除对象(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete):

delete events[0]

delete的问题是,在您的数组中,events[0]的值将离开undefined

另一种方式(我为你的简单例子选择的方式)就是重写数组:

var temp_events = [];
for(var i in events)
    if(events[i].group != deleted_group)
        temp_events[temp_events.length] = events[i];
events = temp_events;

在for循环中执行拼接具有复杂性n ^ 2(其中n是元素的数量)。重写具有线性复杂性。