Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Как определенный элемент массива вставить на первое место?

#javascript #массивы #api


Есть лексикографически отсортированный массив объектов, получаемый из api, где есть
одно из свойств - имя города(Name)
Мне необходимо отсортировать, что бы сначала шел город, который мне нужен, а все
остальные по алфавиту.

const result = response.data
          result.sort( (a, b) => {
            return a.Name.localeCompare(b.Name)
          });


Можно как-нибудь задать такой порядок сортировки, что бы сначала на первом месте
был какой-то определенный город, скажем "Москва", а затем всё остальные элементы отсортировались
лексикографически?
Я пытался сделать что-то типо того:

if(a.Name === 'Москва') {
return 1;
}
if (a.Name < b.Name) {
  return -1;
  }
return 0;


Но это совсем не то...
    


Ответы

Ответ 1



Можно так const arr = [ {Name: 'НеМосква1'}, {Name: 'НеМосква2'}, {Name: 'Москва'}, {Name: 'НеМосква3'} ]; var result = arr.sort( (a, b) => { if(a.name == "Москва") return -1; if(b.name == "Москва") return 1; return a.Name.localeCompare(b.Name) }) console.log(result);

Ответ 2



const result = [ {Name: 'НеМосква1'}, {Name: 'НеМосква2'}, {Name: 'Москва'}, {Name: 'НеМосква3'} ]; // Сначала отсортируйте result.sort((a, b) => a.Name.localeCompare(b.Name)); //Потом поставьте нужный город на первое место: const [item] = result.splice(result.findIndex(a => a.Name === 'Москва'), 1); result.splice(0, 0, item) console.log(result);

Комментариев нет:

Отправить комментарий