Как отсортировать массив объектов по массиву значений определённого свойства?

182
22 мая 2021, 19:10

Есть массив объектов:

messages = [
      {"id":1, "language":"ar"},
      {"id":2, "language":"en"},
      {"id":3, "language":"su"},
      {"id":4, "language":"mo"},
      {"id":5, "language":"da"}
];

И есть массив языков, например, он может быть таким: sortableLanguages = ["su", "ar"]; В итоге должно отсортироваться так:

messages = [
      {"id":3, "language":"su"},
      {"id":1, "language":"ar"},
      {"id":2, "language":"en"},
      {"id":4, "language":"mo"},
      {"id":5, "language":"da"}
];

Т.е., сначала сортируется по массиву sortableLanguages, а потом остальные as is. Дошел до такого кода:

messages.sort((a, b) => {
  if (sortableLanguages.indexOf(a.language) === -1) return -1;
  return sortableLanguages.indexOf(a.language) < sortableLanguages.indexOf(b.language) ? 1 : 0;
});

Но почему-то получается всё наоборот.

Answer 1
messages.sort((a, b) => {
  [ a, b ] = [ a, b ].map(n => sortableLanguages.indexOf(n.language));
  return a === -1 ? 1 : b === -1 ? -1 : a - b;
});
READ ALSO
Почему именно system.out?

Почему именно system.out?

Почему когда мы хотим вывести текст на языке java мы пишем systemout ? что это значит, может кто помочь ?

105
$event.keyCode добавление символа

$event.keyCode добавление символа

может ктото сталкивался с похожей проблемойМне нужно добавить символ è в $event

99
Обход лока БД firefox

Обход лока БД firefox

Имеется js код, который по нажатию кнопок на сайте создает куки с некоторым содержимымТак же есть bash скрипт который читает эти куки и выполняет...

92