过滤特定对象的数组

Filter array of specific objects

如何在javascript中使用filter或forEach只输出没有parentId的对象和只有一级parentId的对象

应输出 ID 为:1681、1682 和 1683 的对象。

不应输出 ID 为:1685、1686 和 1687 的对象。

array = [ {
                    "id": 1681,
                    "label": "1",
                    "url": "page1",
                },
                {
                    "id": 1682,
                    "label": "2",
                    "url": "page1",
                },
                {
                    "id": 1683,
                    "label": "a",
                    "url": "page1",
                    "parentId": 1681,
                },
                {
                    "id": 1685,
                    "label": "aa",
                    "url": "page1",
                    "parentId": 1683,
                },
                {
                    "id": 1686,
                    "label": "aaa",
                    "url": "page1",
                    "parentId": 1683,
                },
                {
                    "id": 1687,
                    "label": "aaaa",
                    "url": "page1",
                    "parentId": 1683,
                }
]

像这样...

array.filter(({item}) => !item.parentId ? item.id : item.parentId)

像这样的东西应该可以工作:

const result = array.filter(object => object.parentId === undefined);

如果我们已经从过滤器函数中找到了 parentId,我们必须保存信息。一个方便的方法是在柜台上使用 prefix operator ++。这样我们就可以绕过 = 的显式、长赋值。相反,我们之前做到了。

此外 destructuring assignment 我们可以轻松地提取数组项的 parentId 并编写一个非常短的过滤器:

array=[{id:1681,label:"1",url:"page1"},{id:1682,label:"2",url:"page1"},{id:1683,label:"a",url:"page1",parentId:1681},{id:1685,label:"aa",url:"page1",parentId:1683},{id:1686,label:"aaa",url:"page1",parentId:1683},{id:1687,label:"aaaa",url:"page1",parentId:1683}];

window.parentIdCount = 0;
window.filtered =

    array.filter(({parentId}) => !parentId || ++parentIdCount <= 1)


console.log(filtered)