[英]How filter and sort in a nested tree Array in javascript?
我需要為菜單過濾和排序嵌套樹 object
排序和過濾狀態也是如此 === true,如何轉向
const items = [{ name: "a1", id: 1, sort: 1, status: true, children: [{ name: "a2", id: 2, sort: 1, status: true, children: [{ name: "a3", id: 3, sort: 2, status: true, }, { name: "a5", id: 4, sort: 1, status: true, } ] }] }, { name: "b2", id: 2, sort: 2, status: true, children: [{ name: "a2", sort: 1, status: false, id: 2, children: [{ name: "a3", id: 3, sort: 1, status: true, }] }, { name: "a4", id: 8, sort: 2, status: true, } ] } ]; console.log('items:', items)
const items = [{
name: "a1",
id: 1,
sort: 1,
status: true,
children: [{
name: "a2",
id: 2,
sort: 1,
status: true,
children: [{
name: "a5",
id: 4,
sort: 1,
status: true,
},
{
name: "a3",
id: 3,
sort: 2,
status: true,
}
]
}]
},
{
name: "b2",
id: 2,
sort: 2,
status: true,
children: [{
name: "a4",
id: 8,
sort: 2,
status: true,
}]
}
];
我會寫兩個遞歸函數:
status: false
項sort
屬性對項目進行排序您可以按照您喜歡的任何順序將兩者結合起來。
itemFilter
filter
function 獲取項目列表。 它遍歷它們中的每一個並檢查它是否有children
。 如果是這樣,它首先過濾那些。 然后,它丟棄所有status: false
的項目。
itemSorter
sort
function 非常相似。 它檢查每個項目並檢查是否有孩子。 如果是這樣,它首先對它們進行排序。 然后,它對傳遞的列表進行排序。
const itemFilter = items => items.map(item => item.children? {...item, children: itemFilter(item.children) }: item ).filter(item => item.status); const itemSorter = items => items.map(item => item.children? {...item, children: itemSorter(item.children) }: item ).sort((i1, i2) => i1.sort - i2.sort); const items=[{name:"a1",id:1,sort:1,status:true,children:[{name:"a2",id:2,sort:1,status:true,children:[{name:"a3",id:3,sort:2,status:true},{name:"a5",id:4,sort:1,status:true}]}]},{name:"b2",id:2,sort:2,status:true,children:[{name:"a2",sort:1,status:false,id:2,children:[{name:"a3",id:3,sort:1,status:true}]},{name:"a4",id:8,sort:2,status:true}]}]; console.log( itemSorter(itemFilter(items)) );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.