Как отсортировать объект по полю даты с помощью lodash?

У меня есть этот объект JavaScript:

var items = [
  {
    name: "order 2",
    date: "2020-02-01T13:50:04.869Z",
  },  
  {
    name: "order 3",
    date: "2020-03-01T13:50:04.869Z",
  },  
  {
    name: "order 1",
    date: "2020-01-01T13:50:04.869Z",
  },
];

И я хочу получить массив ["order 1", "order 2", "order 3"] где имена взяты и упорядочены по дате.

То, что я пробовал до сих пор (с использованием lodash ):

var array = _.map(
    _.sortBy(items, function(el) { return el.date; }), 
     function(el) { return el.name; }
);

Который сортирует элементы, но моя дата распознается как string а не как date time .

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

Всего 2 ответа


Вы можете попробовать это:

var items  = [
  {
    name: "order 2",
    date: "2020-02-01T13:50:04.869Z",
  },  
  {
    name: "order 3",
    date: "2020-03-01T13:50:04.869Z",
  },  
  {
    name: "order 1",
    date: "2020-01-01T13:50:04.869Z",
  },
];

var names = items .sort(function compare(a, b) {
  var dateA = new Date(a.date);
  var dateB = new Date(b.date);
  return dateA - dateB;
}).map(v => v.name);

console.log(names);


_.sortBy() синтаксический _.sortBy() date в функции _.sortBy() и установите для iteratee _.map() значение name :

var items = [{"name":"order 2","date":"2020-02-01T13:50:04.869Z"},{"name":"order 3","date":"2020-03-01T13:50:04.869Z"},{"name":"order 1","date":"2020-01-01T13:50:04.869Z"}];

var array = _.map(
  _.sortBy(items, o => Date.parse(o.date)),
  'name'
);

console.log(array);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>


Есть идеи?

10000