簡體   English   中英

檢查數組長度內的數組是否為空,然后從主數組中刪除父數組

[英]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. 生成一個新數組並將其分配給原始數組
  2. 刪除不需要的項目,而不會生成臨時項目。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM