Как отсортировать массив объектов по ключевым значениям объекта строкового типа - PullRequest
0 голосов
/ 17 июня 2020

У меня есть такой массив

 let years =[
       {id: 3, name: "2016", age: "None"},
       {id: 1, name: "2017", age: "None"},
       {id: 2, name: "2015", age: "None"},
       {id: 5, name: "2018", age: "None"},
       {id: 3, name: "2018/2019", age: "None"}
       ]
       
years.sort((c1, c2) => {
        return c2.name - c1.name;
       });
       
console.log(years);       

Я не мог справиться с этим способом «2018/2017». Как я могу это сделать как лучше?

Ответы [ 4 ]

3 голосов
/ 17 июня 2020

Вы можете использовать localeCompare

const years = [
    { id: 3, name: '2016', age: 'None' },
    { id: 1, name: '2017', age: 'None' },
    { id: 2, name: '2015', age: 'None' },
    { id: 5, name: '2018', age: 'None' },
    { id: 3, name: '2018/2019', age: 'None' },
];

years.sort((c1, c2) => c2.name.localeCompare(c1.name));

console.log(years);
1 голос
/ 17 июня 2020

Вы почти у цели ... Небольшое изменение в обратном вызове сортировки и готово:

let years = [
    { id: 3, name: '2016', age: 'None' },
    { id: 1, name: '2017', age: 'None' },
    { id: 2, name: '2015', age: 'None' },
    { id: 5, name: '2018', age: 'None' },
    { id: 3, name: '2018/2019', age: 'None' },
];
years.sort((c1, c2) => {
    var n1 = c1.name;
    var n2 = c2.name;
    if(n1 > n2){return -1;
    }else if(n2 > n1){ return 1;
}else{return 0;}
   });
console.log(years);
0 голосов
/ 17 июня 2020

Вы можете использовать loda sh _.sortBy

var years =
[{id: 5, name: "2018", age: "None"},
 {id: 3, name: "2018/2017", age: "None"},
 {id: 1, name: "2017", age: "None"},
 {id: 3, name: "2016", age: "None"},
 {id: 2, name: "2015", age: "None"}]

_.sortBy(years, ['name']);

Результат будет

enter image description here

0 голосов
/ 17 июня 2020

Попробуйте следующее:

years.sort((c1, c2) => {
  if (c1.name > c2.name) return -1;
  if (c1.name < c2.name) return 1;
  return 0;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...