2016-06-28 1 views
0

하이에서 상위 배열을 제거 비어 상기 배열 번호의 배열체크 배열은 내가이 생각</p> <p>다음 주 배열에서 상위 배열을 빈 제거하는 배열의 길이 내부 배열을 확인하는 방법의 주요 배열

[ 
    { 
     "id": 71, 
     "campaignAssets": [ 
      { 
       "id": 128 
      } 
     ] 
    }, 
    { 
     "id": 99, 
     "campaignAssets": [] 
    } 
] 

99 나는 상위 어레이를 제거 할 수 있도록 campaignAssets 해달라고하는

{ 
     "id": 99, 
     "campaignAssets": [] 
    } 
수단 : 71는 길이가 1이지만, 다른 하나는 "ID"에 campaignAssets 배열을

그렇게 최종 배열

[ 
    { 
     "id": 71, 
     "campaignAssets": [ 
      { 
       "id": 128 
      } 
     ] 
    } 
] 

답변

6

이 제안은 두 가지 솔루션을 제공,

  1. 새로운 배열을 생성하고
  2. 임시을 생성하지 않고 원치 않는 항목을 삭제 원래 배열에 할당해야합니다. 새로운 배열로

1

당신은 심지어 짧은입니다 ES6에서 Array#filter

var data = [{ "id": 71, "campaignAssets": [{ "id": 128 }] }, { "id": 99, "campaignAssets": [] }]; 
 

 
data = data.filter(function (a) { return a.campaignAssets.length; }); 
 

 
console.log(data);

으로 필터링 할 수

시츄 용액에 대한 새로운 배열

없이

2 56,611,883,210

배열을 유지하고 제로 길이 요소만을 삭제, 난 역방향 반복을 사용하여 길이를 확인하도록 제안하고 그에 따라 Array#splice을 사용하십시오.

var data = [{ "id": 71, "campaignAssets": [{ "id": 128 }] }, { "id": 99, "campaignAssets": [] }], 
 
    i = data.length; 
 

 
while (i--) { 
 
    if (!data[i].campaignAssets.length) { 
 
     data.splice(i, 1); 
 
    } 
 
} 
 

 
console.log(data);

+0

내가 복귀'에 의해 부울을 반환 .filter''에 콜백을 시행 유지하는 게 좋을 것 (a.campaignAssets.length> 0) ' – Icycool

+0

콜백 자체는 사실/거짓 값을 사용합니다. * 콜백이 true로 설정되는 값을 반환하는 모든 값의 새로운 배열을 구성합니다. * [source] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ 배열/필터) –

0

var data =[ 
 
    { 
 
     "id": 71, 
 
     "campaignAssets": [ 
 
      { 
 
       "id": 128 
 
      } 
 
     ] 
 
    }, 
 
    { 
 
     "id": 99, 
 
     "campaignAssets": [] 
 
    } 
 
] 
 
var i = data.length; 
 
while (i--) { 
 
    if(data[i].hasOwnProperty('campaignAssets') && data[i]['campaignAssets'].length==0) 
 
     data.splice(i, 1) 
 
} 
 

 
// This one is wrong implementation as pointed out, it will not delete element from reducing array.. 
 
// data.forEach(function(parent,index){ 
 
// if(parent.hasOwnProperty('campaignAssets') && parent['campaignAssets'].length==0) 
 
//  data.splice(index, 1) 
 
// }); 
 

 
console.log(data);

+0

splice 후 루프 인덱스가 감소하지 않기 때문에 솔루션에서 일부 요소를 건너 뜁니다. http://stackoverflow.com/q/24202962/5039495 – Icycool

+0

감사합니다. @Icycool, 좋습니다. 내 대답을 업데이트 해주세요. –