Lodash _.sortBy на основе созданной даты и времени - PullRequest
0 голосов
/ 10 октября 2019

let notesInfo = []

if (_.isArray(result)) {
  console.log(result, '-----------');
  notesInfo = _.sortBy(result, ['modifiedDate']);
} else {
  notesInfo = result;
}

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

Я использую этот код для отображения заметок на основе созданной даты и времени. Примечание, которое добавило последние, должно идти сверху, используя метод sortBy из lodash. Как этого добиться? Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 10 октября 2019

Если вы хотите, чтобы сначала был самый последний элемент, а остальные в порядке возрастания, то вы можете просто отсортировать их в порядке возрастания. Поскольку последний элемент будет самым последним, вы можете повернуть его в начало массива с помощью Array#pop и Array#unshift:

let result = [
  { modifiedDate: "2019-02-01", name: "february" },
  { modifiedDate: "2019-04-01", name: "april" },
  { modifiedDate: "2019-01-01", name: "january" },
  { modifiedDate: "2019-03-01", name: "march" }
];

//sort ascending
let notesInfo = _.sortBy(result, ['modifiedDate']);

//take the most recent (last)
var lastElement = notesInfo.pop();

//place it first
notesInfo.unshift(lastElement);

console.log(notesInfo);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>

Если вы хотите, чтобы элементы находились в порядке убывания, вам следует использовать _.orderBy вместо _.sortBy:

let result = [
  { modifiedDate: "2019-02-01", name: "february" },
  { modifiedDate: "2019-04-01", name: "april" },
  { modifiedDate: "2019-01-01", name: "january" },
  { modifiedDate: "2019-03-01", name: "march" }
];

//sort descending
let notesInfo = _.orderBy(result, ['modifiedDate'], ['desc']);

console.log(notesInfo);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
0 голосов
/ 10 октября 2019

let notesInfo = []

if (_.isArray(result)) {
  console.log(result, '-----------');
  notesInfo = _.sortBy(result, ['modifiedDate']).reverse();
} else {
  notesInfo = result;
}

console.log(notesInfo)

Работает как положено. Спасибо

0 голосов
/ 10 октября 2019

Давайте предположим, что это ваши данные:

 var result = [{
      name: "Mango",
      modifiedDate: "Mon Oct 10 2019 00:00:00 GMT-0700 (PDT)"
    }, {
      name: "Banana",
      modifiedDate: "Sun Oct 9 2019 00:00:00 GMT-0700 (PDT)"
    }, {
      name: "Kivi",
      modifiedDate: "Sat Oct 8 2019 00:00:00 GMT-0700 (PDT)"
    }];

Вы можете достичь этого без lodash с помощью нативного Array.prototype.sort()

result.sort(function compare(a, b) {
  var dateA = new Date(a.modifiedDate);
  var dateB = new Date(b.modifiedDate);
  return dateA - dateB;
});

Или с lodash

output = _.sortBy(result, function(dateObj) {
  return new Date(dateObj.modifiedDate);
});
...