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,687
  • 7
  • 53
  • 122
myTest532 myTest532
  • 2,091
  • 3
  • 35
  • 78

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
  • 42,981
  • 12
  • 84
  • 132