JSON 复杂嵌套数组排序使用顺序

安卓X

我有一个复杂的嵌套 JSON 数组,我想使用itemsortorderfrom subitemnameorderexternal levelfrom.inside level从内部和外部级别对其进行排序

我给定的数组如下


    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/还附上了控制台的图像在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章