[英]check array inside an array length is empty then remove the parent array from the main array
嗨,如何檢查數組內部的數組長度是否為空,然后從主數組中刪除父數組,
想想我有一個數組
[
{
"id": 71,
"campaignAssets": [
{
"id": 128
}
]
},
{
"id": 99,
"campaignAssets": []
}
]
從上面的數組ID:71有campaignAssets數組,其長度為1,但在另一個“ id”上:99沒有campaignAssets,所以我必須刪除父數組,這意味着
{
"id": 99,
"campaignAssets": []
}
所以最終數組應該是
[
{
"id": 71,
"campaignAssets": [
{
"id": 128
}
]
}
]
該提案具有兩種解決方案,
1.具有新陣列
您可以使用Array#filter
對其進行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);
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.