我正在尝试删除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
,我仍然愿意接受消化。
先谢谢你,丹尼尔!
答案 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是元素的数量)。重写具有线性复杂性。