Lodash:如何使用 id 从数组中删除项目或嵌套项目?

cro*_*ite 4 javascript arrays multidimensional-array lodash

我有一个如下所示的数组:

[
    {
        "id": "denuzi",
        "sub":
        [
            {"id": "s4p58o"},
            {"id": "xzbqi"},
        ],
    },
    {
        "id": "4rcodm",
        "sub": [],
    }
]
Run Code Online (Sandbox Code Playgroud)

我想做的是使用提供的 id 从数组或嵌套数组中删除一个项目。

例如,如果denuzi提供,则删除整个第一个对象;如果s4p58o提供,则仅删除第一个对象子数组中的对象。

我知道我可以使用以下代码删除整个对象:

_.remove(this.items, function(item) {
    return item.id !== id;
});
Run Code Online (Sandbox Code Playgroud)

但我不知道如何进行检查以删除子项目?

Nin*_*olz 5

您可以通过检查id或再次调用来采取迭代和递归方法sub。如果找到则退出。

function remove(array, id) {
    return array.some((o, i, a) => o.id === id
        ? a.splice(i, 1)
        : remove(o.sub || [], id)
    );
}

var array = [{ id: "denuzi", sub: [{ id: "s4p58o" }, { id: "xzbqi" }] }, { id: "4rcodm", sub: [] }];

remove(array, 's4p58o');
console.log(array);

remove(array, 'denuzi');
console.log(array);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)