2014-01-15 35 views
1

我想删除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,我也会受到遏制。

先谢谢你了,丹尼尔!

回答

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'; })); 
+0

这很好,非常感谢你,也感谢大家在这个主题 –

+0

@PacuraruDaniel下划线解决方案确实很好 - 我错过了你在我的答案中使用下划线。我的答案是针对不想使用下划线并对纯JS解决方案感兴趣的人。 – Karol

0

当你使用“拼接”功能删除从数组元素中一个for循环, 你自阵列移除项目时,必须将目前的指数移回被重新编制索引。

也可以看看像“过滤器”这样的数组函数,以更方便的方式阅读更多关于MDN

+2

过滤器似乎是问题的正确答案,但是,[IE <9不支持Array.prototype.filter](http://kangax.github.io/es5-compat-table/#Array.prototype。过滤)。 –

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为元素的个数)。重写具有线性复杂性。