сортировать массив по свойству без использования первого объекта - PullRequest
1 голос
/ 22 апреля 2020

У меня есть массив объектов, и я хочу отсортировать их по идентификаторам объектов. Я попытался использовать options.sort((a, b) => a.id.localeCompare(b.id));, но не сработал, как ожидалось, потому что он сортирует даже объект «все», и я не хочу этого (объект с id = 'all' должен быть первым в моем массиве, после этого должен быть объекты в порядке возрастания). Ниже вы можете увидеть вход и выход моего кода

Вход:

 var items = 
           [{ 'Name':'All', 'id': 'all'
            { 'Name':'item1', 'id': '003' }
            { 'Name':'item2', 'id': '001' }
            { 'Name':'item3', 'id': '002' }];

Выход:

  var items = 
           [{ 'Name':'item2', 'id': '001' }
            { 'Name':'item3', 'id': '002' }
            { 'Name':'item1', 'id': '003' }
            { 'Name':'All', 'id': 'all'}];

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

 function compare(key, order = 'desc') {
  return (a, b) => {
    if (a[key] > b[key])
      return order === 'desc' ? -1 : 1;
    if (a[key] < b[key])
      return order === 'desc' ? 1 : -1;
    return 0;
  };
 }


const data = [
      { 'Name':'All', 'id': 'all'},
      { 'Name':'item3', 'id': '003' },
      { 'Name':'item1', 'id': '001' },
      { 'Name':'item2', 'id': '002' }
 ];
 
 const sortedData = data.sort(compare('Name', 'asce'));
 console.log('sorted: ', sortedData);
0 голосов
/ 22 апреля 2020

должно работать

var items = 
           [{ 'Name':'All', 'id': 'all' },
            { 'Name':'item1', 'id': '003' },
            { 'Name':'item2', 'id': '001' },
            { 'Name':'item3', 'id': '002' }];
            
   items.sort((a, b) => ((typeof b.id === "number") - (typeof a.id === "number")) || (a.id > b.id ? 1 : -1));

// items.sort((a, b) => (((typeof b.id === "number") as any) - ((typeof a.id === "number") as any)) || (a.id > b.id ? 1 : -1) );

  console.log(items)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...