簡體   English   中英

JSON復雜的嵌套數組使用順序排序

[英]JSON complex nested array sort using order

我有一個復雜的嵌套JSON數組,我想使用外部級別的subitemnameorder和from.inside級別的itemsortorder從內部和外部級別對其進行排序

我給定的數組下面


    id:1,
    "fruits":[
        {
        "itemid":1,
        "itemname":"Red Fruits",
        "itemsortorder":2,
        "subitems":[ {"subitemname":"Apple", "subitemnameorder":2},
                     {"subitemname":"Grapes", "subitemnameorder":1},
                     {"subitemname":"Berryberry", "subitemnameorder":3}
                   ]
        },
        {
        "itemid":2,
        "itemname":"Yellow Fruits",
        "itemsortorder":1,
        "subitems":[ {"subitemname":"Orange", "subitemnameorder":3},
                     {"subitemname":"Gua", "subitemnameorder":1},
                     {"subitemname":"Mango", "subitemnameorder":2}
                   ]
        }

    ],
    "Vegetable":[
        {
        "itemid":3,
        "itemname":"Red Veggies",
        "itemsortorder":2,
        "subitems":[ {"subitemname":"Onion", "subitemnameorder":2},
                     {"subitemname":"Ginger", "subitemnameorder":1},
                     {"subitemname":"Carrot", "subitemnameorder":3}
                   ]
        },
        {
        "itemid":4,
        "itemname":"Small Veggies",
        "itemsortorder":1,
        "subitems":[ {"subitemname":"pepper", "subitemnameorder":3},
                     {"subitemname":"halo", "subitemnameorder":1},
                     {"subitemname":"good", "subitemnameorder":2}
                   ]
        },
        {
        "itemid":5,
        "itemname":"Cool",
        "itemsortorder":3,
        "subitems":[ {"subitemname":"abc", "subitemnameorder":3},
                     {"subitemname":"pqr", "subitemnameorder":1},
                     {"subitemname":"kooi", "subitemnameorder":2}
                   ]
        }

    ],

    "avoid":[
    {
        "itemid":3,
        "itemname":"avoid Veggies",
        "itemsortorder":2,
        "subitems":[ {"subitemname":"Onion", "subitemnameorder":2},
                     {"subitemname":"Ginger", "subitemnameorder":1},
                     {"subitemname":"Carrot", "subitemnameorder":3}
                   ]
        }]
}

避免避免數組部分

預期


   {  
      "filename":"Yellow Fruits",
      "children":[  
         {  
            "filename":"Gua",
            "subitemnameorder":1
         },
         {  
            "filename":"Mango",
            "subitemnameorder":2
         },
         {  
            "filename":"Orange",
            "subitemnameorder":3
         }
      ]
   },
   {  
      "filename":"Red Fruits",
      "children":[  
         {  
            "filename":"Grapes",
            "subitemnameorder":1
         },
         {  
            "filename":"Apple",
            "subitemnameorder":2
         },
         {  
            "filename":"Berryberry",
            "subitemnameorder":3
         }
      ]
   },
   ,
   {  
      "filename":"Small Veggies",
      "children":[  
         {  
            "filename":"halo",
            "subitemnameorder":1
         },
         {  
            "filename":"good",
            "subitemnameorder":2
         },
         {  
            "filename":"pepper",
            "subitemnameorder":3
         }
      ]
   },
   {  
      "filename":"Red Veggies",
      "children":[  
         {  
            "filename":"Ginger",
            "subitemnameorder":1
         },
         {  
            "filename":"Carrot",
            "subitemnameorder":2
         },
         {  
            "filename":"Onion",
            "subitemnameorder":3
         }
      ]
   },
   {  
      "filename":"Cool",
      "children":[  
         {  
            "filename":"pqr",
            "subitemnameorder":1
         },
         {  
            "filename":"kooi",
            "subitemnameorder":2
         },
         {  
            "filename":"abc",
            "subitemnameorder":3
         }
      ]
   }
   ]

首先,它應該取自水果,並進行相應的分類,然后取自蔬菜,然后按照

我已經嘗試使用過濾器和地圖,但無法正常工作。 請幫忙。

我嘗試了下面的功能,請看小提琴

https://jsfiddle.net/qb2pueg7

我假設您將json分配給變量data因此代碼如下

let keysarr = Object.keys(data);
let temp = [];
  for(let i=0;i<keysarr.length;i++){
    if(keysarr[i]!=="id" && keysarr[i]!=="avoid"){
     let tempsortL1 = data[keysarr[i]].
      sort((a,b)=>a.itemsortorder-b.itemsortorder).map((item)=>{
                let retObj={};
              retObj["filename"] = item.itemname;
              retObj["children"]=item.subitems.sort((a,b)=>a.subitemnameorder-b.subitemnameorder); 
          temp.push(retObj);
          return retObj;});

 }
};

您所需的數組將變為temp 抱歉,如果您認為代碼未格式化,我試圖保持在排序時不考慮鍵。 這是小提琴https://jsfiddle.net/pv2sLejc/還附加了控制台的圖像 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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