2016-06-28 18 views
0

嗨如何檢查數組長度內數組是空的,然後從主數組中刪除父陣列的父陣列,校驗序列爲空,那麼請從主陣列

想想我有一個陣列

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

從上述數組編號:71具有campaignAssets排列的長度爲1,但是,從另外一個「ID」:99不具有campaignAssets所以我必須刪除父陣列,這意味着

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

所以最終陣列應該

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

回答

6

這個建議有兩個解決方案,

  1. 生成一個新的數組,並將其分配給原始數組
  2. 刪除不想要的項目,而不產生暫時的。

1.用新的陣列

您可以用Array#filter

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

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

 
console.log(data);

過濾它在ES6,它甚至更短的

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

 
data = data.filter(a => 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

我建議保持由'返回執行上'.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

您的解決方案將跳過一些元素,因爲不會減少拼接後的循環索引,請參閱:http://stackoverflow.com/q/24202962/5039495 – Icycool

+0

謝謝@Icycool,很好的捕獲。我更新了我的答案,請檢查 –