2014-01-15 63 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爲元素的個數)。重寫具有線性複雜性。