0

I'm trying to sort a map by value where the values are arrays.

For example the map below:

{'let1': ['art', 'can'], 'let2': ['own', 'kit', 'dig'], 'let3': ['art', 'zero']}

I would like to sort it as:

{'let1': ['art', 'can'], 'let3': ['art', 'zero'], 'let2': ['own', 'kit', 'dig']}

Is it possible using the JavaScript sort() method?

Heretic Monkey
  • 10,498
  • 6
  • 45
  • 102
myTest532 myTest532
  • 1,451
  • 10
  • 24

1 Answers1

3

Sorting of an object is not advised. It should be treated as a look-up. You should convert the key-value pairs to entry tuples and sort the value at index 1 (aka the value array).

See: Sorting object property by values

let obj = {
  'let1': ['art', 'can'],
  'let2': ['own', 'kit', 'dig'],
  'let3': ['art', 'zero']
};

console.log(Object.entries(obj).sort((a, b) =>
  a[1].join(',').localeCompare(b[1].join(','))));
.as-console-wrapper { top: 0; max-height: 100% !important; }

Result

[
  [ "let1", [ "art", "can"        ] ],
  [ "let3", [ "art", "zero"       ] ],
  [ "let2", [ "own", "kit", "dig" ] ]
]
Mr. Polywhirl
  • 31,606
  • 11
  • 65
  • 114