簡體   English   中英

如何在 javascript 中的嵌套樹數組中進行過濾和排序?

[英]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.

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