2014-01-15 10 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을 사용하여 설탕에 대한 열었습니다.

미리 감사드립니다. Daniel!

답변

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

당신은 객체 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete를) 삭제 delete 연산자를 사용할 수 있습니다

delete events[0] 

delete의 문제는, 그 배열에, events[0]의 값으로는 undefined을 떠날 것이다.

그래서 다른 방법 (나는 당신의 간단한 예를 들어 선택하는 방법과는) 단지 배열을 재 작성하는 것입니다 : for 루프에서 스플 라이스를 실행

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

n은 요소의 수를 복잡 N^2 (이). 다시 쓰기에는 선형 복잡성이 있습니다.