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
  • 11,078
  • 7
  • 55
  • 112
myTest532 myTest532
  • 1,815
  • 1
  • 19
  • 48

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
  • 35,562
  • 12
  • 75
  • 123