1

I have a json response coming from remote api. In that JSON, i have a l2_list which describes the sorting order of the respective children.

I want to sort children based on "l2_list" order.

I have I have a json array like below:

var TreeObj = `{
    "RULE_JSON":
        {

            "2674":{
                "pid":"0",
                "level":"1",
                "mid":"2674",
                "name":"test1",
                "l2_list": [3083],
                "children":
                    {
                        "3083":{"pid":"2674","level":"2","mid":"3083","name":"MAINTENANCE","children":[]}
                    }
            },
            "2619":{
                "pid":"0",
                "level":"1",
                "mid":"2619",
                "name":"EFFICIENCY",
                "l2_list": [2605,2608,2607,2626,2627,3057,3058],
                "children":
                    {
                        "2605":{"pid":"2619","level":"2","mid":"2605","name":"IDLING","children":[]},
                        "2607":{"pid":"2619","level":"2","mid":"2607","name":"COMPLIANT","children":[]},
                        "2626":{"pid":"2619","level":"2","mid":"2626","name":"DISPATCHED","children":[]},
                        "2627":{"pid":"2619","level":"2","mid":"2627","name":"HOURS","children":[]},
                        "2608":{"pid":"2619","level":"2","mid":"2608","name":"COMPLIANT DEPART","children":[]},
                        "3058":{"pid":"2619","level":"2","mid":"3058","name":"CENTER VISITS","children":[]},
                        "3057":{"pid":"2619","level":"2","mid":"3057","name":"OFFICE VISITS","children":[]}
                    }
            }
        }
}`;

After sorting, my result set should show 2619 children as below:

"l2_list": [2605,2608,2607,2626,2627,3057,3058],
    "children":
        {
            "2605":{"pid":"2619","level":"2","mid":"2605","name":"IDLING","children":[]},
            "2608":{"pid":"2619","level":"2","mid":"2608","name":"COMPLIANT DEPART","children":[]},
            "2607":{"pid":"2619","level":"2","mid":"2607","name":"COMPLIANT","children":[]},
            "2626":{"pid":"2619","level":"2","mid":"2626","name":"DISPATCHED","children":[]},
            "2627":{"pid":"2619","level":"2","mid":"2627","name":"HOURS","children":[]},
            "3057":{"pid":"2619","level":"2","mid":"3057","name":"OFFICE VISITS","children":[]},
            "3058":{"pid":"2619","level":"2","mid":"3058","name":"CENTER VISITS","children":[]}
        }

Please help me

Nico Diz
  • 1,387
  • 1
  • 4
  • 19
Sricharan
  • 395
  • 1
  • 16
  • 1
    In javascript, the order in which keys appear in an object cannot be guaranteed like you specified in your final code snippet. (Further reading: https://www.stefanjudis.com/today-i-learned/property-order-is-predictable-in-javascript-objects-since-es2015/). At minimum, you'll need to refactor the value of 'children' to be an array in all likelihood. Can the JSON be accessed differently? Maybe iterate over the l2_list and call element.children[list2_listElement] for each? – Jeff Hechler Jun 21 '19 at 13:55
  • Why do you need that? If you already have the ids sorted in a an array, why isn't it enough to use that for retrieving the children in the desired order? Iterate over the l2_list array and use each value as an index for children. – lpacheco Jun 21 '19 at 14:00
  • @gaetanoM, it is not duplicate, I want to sort the array as per given order in l2_list – Sricharan Jun 22 '19 at 04:42

1 Answers1

1

assuming in variable a was stored your object

a = `{"l2_list": [2605,2608,2607,2626,2627,3057,3058],
    "children":
        {
            "2605":{"pid":"2619","level":"2","mid":"2605","name":"IDLING","children":[]},
            "2608":{"pid":"2619","level":"2","mid":"2608","name":"COMPLIANT DEPART","children":[]},
            "2607":{"pid":"2619","level":"2","mid":"2607","name":"COMPLIANT","children":[]},
            "2626":{"pid":"2619","level":"2","mid":"2626","name":"DISPATCHED","children":[]},
            "2627":{"pid":"2619","level":"2","mid":"2627","name":"HOURS","children":[]},
            "3057":{"pid":"2619","level":"2","mid":"3057","name":"OFFICE VISITS","children":[]},
            "3058":{"pid":"2619","level":"2","mid":"3058","name":"CENTER VISITS","children":[]}
        }}`

You can fill array sorted by next code

sorted = [];
a.l2_list.forEach(number => {
   let str = number.toString();
    let obj = {};
     obj[str] = a.children[str];
   sorted.push(obj)
});

Andry Shutka
  • 298
  • 1
  • 4