检查数组内部的数组长度为空,然后从主数组中删除父数组

Gay*_*han 0 javascript underscore.js

嗨如何检查数组长度内的数组为空,然后从主数组中删除父数组,

想想我有一个阵列

[
    {
        "id": 71,
        "campaignAssets": [
            {
                "id": 128
            }
        ]
    },
    {
        "id": 99,
        "campaignAssets": []
    }
]
Run Code Online (Sandbox Code Playgroud)

从上面的数组ID:71有campaignAssets数组,其长度为1但在另一个"id":99没有campaignAssets所以我必须删除父数组,这意味着

    {
        "id": 99,
        "campaignAssets": []
    }
Run Code Online (Sandbox Code Playgroud)

所以最终阵列应该是

[
    {
        "id": 71,
        "campaignAssets": [
            {
                "id": 128
            }
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 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);
Run Code Online (Sandbox Code Playgroud)

在ES6中,它甚至更短

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

data = data.filter(a => a.campaignAssets.length);

console.log(data);
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)