2016-06-28 10 views
0

こんにちはから親配列を、削除空であります配列番号上方からアレイチェック配列は、その後、私が持って考える</p> <p>その後、メインアレイから親配列を空に削除された配列の長さの内部配列を確認する方法メインアレイ

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

:長さ71 campaignAssetsを有するアレイは1であるが、他の一つの「ID」に:99はいけない私は

{ 
     "id": 99, 
     "campaignAssets": [] 
    } 
を意味する親配列を除去しなければならないのでcampaignAssetsを有します

はそう最終配列

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

答えて

6

この提案は、2つのソリューションを備え、

  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、配列を維持し、ゼロの長さの要素のみを削除し、私は後方に反復を使用し、長さをチェックすることをお勧めし、それに応じて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

私は(a.campaignAssets.length> 0)リターン 'によってブール値を返す' .filter'にコールバックを強制保つことをお勧めしたいです' – Icycool

+0

コールバック自体はtruey/falsey値を使用します。 *を呼び出し、コールバックが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

スプライス後にループインデックスを減少させないため、あなたのソリューションはいくつかの要素をスキップします。http://stackoverflow.com/q/24202962/5039495 – Icycool

+0

感謝@Icycool、良いキャッチ。私は自分の答えを更新してください –

関連する問題