Как можно отсортировать массив одинаковых объектов по вложенному свойству? - PullRequest
0 голосов
/ 04 января 2019

У меня есть массив элементов следующим образом:

myarray = [
    {
      somedate: "2018-01-11T00:00:00",
      name: "John Doe",
      level: 6000
    },
    {
      somedate: "2017-12-18T00:00:00",
      name: "Don Jhoe",
      level: 53
    },
    {
      somedate: "2016-12-18T00:00:00",
      name: "Jane Doe",
      level: 100
    },
    {
      somedate: "2018-10-18T00:00:00",
      name: "Dane Joe",
      level: 1
    }
]

Я пытаюсь выяснить, как отсортировать этот массив, чтобы он сортировался по дате. Я знаю, как отсортировать массив простых свойств:

Сортировать массив объектов Javascript по дате

array.sort(function(a,b){
      // Turn your strings into dates, and then subtract them
      // to get a value that is either negative, positive, or zero.
      return new Date(b.date) - new Date(a.date);
    });

Но как лучше всего сортировать массив по свойствам элементов?

РЕДАКТИРОВАТЬ: Да, это действительно неправильные строки даты, предоставляемые странным веб-сервисом, который не обрабатывает время.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Имея дату, совместимую с ISO 8601 , вы можете использовать строковый компаратор, потому что организация значений (год, месяц, день, час и т. Д.) Убывает и имеет одинаковую длину для каждого блок.

var array = [{ somedate: "2018-01-11T00:00:00", name: "John Doe", level: 6000 }, { somedate: "2017-12-18T00:00:00", name: "Don Jhoe", level: 53 }, { somedate: "2016-12-18T00:00:00", name: "Jane Doe", level: 100 }, { somedate: "2018-10-18T00:00:00", name: "Dane Joe", level: 1 }];

array.sort(({ somedate: a }, { somedate: b }) => b.localeCompare(a)); // desc

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 04 января 2019

Код, который вы разместили на самом деле работает просто отлично. Все, что вам нужно сделать, это сравнить somedate вместо date и назначить окончательный результат сортировки оригиналу (если это то, что вам нужно).

myarray = myarray.sort(function(a,b){
      return new Date(b.somedate) - new Date(a.somedate);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...