Guedda
@Guedda
Начинающий front-end разработчик

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

Есть массив объектов:
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;
});

Но почему-то получается всё наоборот.
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
messages.sort((a, b) => {
  [ a, b ] = [ a, b ].map(n => sortableLanguages.indexOf(n.language));
  return a === -1 ? 1 : b === -1 ? -1 : a - b;
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@fallus
messages.sort(function(val){
  if(sortableLanguages.indexOf(val.language) != -1) return -1
})


Я хз, у меня вернулось это:
0: {id: 3, language: "su"}
1: {id: 1, language: "ar"}
2: {id: 2, language: "en"}
3: {id: 4, language: "mo"}
4: {id: 5, language: "da"}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы