#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);
Комментариев нет:
Отправить комментарий