0

I want to sort objects alphabetically below is the json which i am trying to sort

  const data = {
      Cutting: [{ display_name: 'abc' }, { display_name: 'cdf' }],
      Facials: [{ display_name: 'sdf' }, { display_name: 'sd' }],
      IPL: [{ display_name: 'sdf' }, { display_name: 'er' }],
      Massage: [{ display_name: 'abc' }, { display_name: 'cdf' }],
      Mens: [{ display_name: 'fg' }],
      Styling: [{ display_name: 'cdf' }],
      highlights: [
        { display_name: 'abc' },
        { display_name: 'yyy' },
        { display_name: 'vvv' },
      ],
    };

the output :-

  const data = {
      Cutting: [{ display_name: 'abc' }, { display_name: 'cdf' }],
      Facials: [{ display_name: 'sdf' }, { display_name: 'sd' }],
      highlights: [
        { display_name: 'abc' },
        { display_name: 'yyy' },
        { display_name: 'vvv' },
      ],
      IPL: [{ display_name: 'sdf' }, { display_name: 'er' }],
      Massage: [{ display_name: 'abc' }, { display_name: 'cdf' }],
      Mens: [{ display_name: 'fg' }],
      Styling: [{ display_name: 'cdf' }],
    };

Here is the code which I am trying

const keysSorted = Object.keys(response).sort(function(a, b) {
  debugger;
  return response[a].localeCompare(b.toUpperCase());
});
console.log(keysSorted);

in the above response[a] doesn't contain localecompare is the error I m getting if I just do a.localecompare(b) then it gives only keys of objects no values. How to sort this by getting both key and value

  • `a.localeCompare` not `response[a].localeCompare`. `response[a]` returns the value for that key, which is an array. – adiga Jul 01 '21 at 06:50

1 Answers1

0

First sort your dictionary based on your key by Object.keys(data).sort(); and then use reduce function find whole object based on sorted key.

Like this:

const data = {
            Cutting: [{ display_name: 'abc' }, { display_name: 'cdf' }],
            Facials: [{ display_name: 'sdf' }, { display_name: 'sd' }],
            IPL: [{ display_name: 'sdf' }, { display_name: 'er' }],
            Massage: [{ display_name: 'abc' }, { display_name: 'cdf' }],
            Mens: [{ display_name: 'fg' }],
            Styling: [{ display_name: 'cdf' }],
            highlights: [
                { display_name: 'abc' },
                { display_name: 'yyy' },
                { display_name: 'vvv' },
            ],
        };


         const result = Object.keys(data).sort(
            function (a, b) {
               return a.toLowerCase().localeCompare(b.toLowerCase());
         }
         ).reduce((r, k) => (r[k] = data[k], r), {});

        console.log(result);
Alireza Ahmadi
  • 7,635
  • 4
  • 11
  • 32