@rustam9ksenov

Отсортировать массив с вложенным обьектом json?

Как отсортировать обьект массива с вложеным json по дате ключа json.

data = [{
      "history_date": "23.05.2021, 6:52",
      "history_text": "Такси в ожидании"
    },
    {
      "history_date": "24.05.2021, 8:52",
      "history_text": "Такси в ожидании"
    },
    {
      "history_date": "25.05.2021, 9:52",
      "history_text": "Такси в ожидании"
    }]

Чтобы получить в итоге тот же массив, только с сортировкой по дате

data = [{
      "history_date": "25.05.2021, 9:52",
      "history_text": "Такси в ожидании"
    },
    {
      "history_date": "24.05.2021, 8:52",
      "history_text": "Такси в ожидании"
    },
    {
      "history_date": "23.05.2021, 6:52",
      "history_text": "Такси в ожидании"
    }]
  • Вопрос задан
  • 57 просмотров
Решения вопроса 1
@o5a
Для сортировки можно передавать функцию в параметр key, которая выдаст именно нужный элемент сортировки. Для преобразования даты datetime.strptime с указанием формата.
print(sorted(data, key=lambda x: datetime.datetime.strptime(x['history_date'], '%d.%m.%Y, %H:%M'), reverse=True))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
TTATPuOT
@TTATPuOT
https://code.patriotovsky.ru/
const data = [
  {
    history_date: "23.05.2021, 6:52",
    history_text: "Такси в ожидании"
  },
  {
    history_date: "24.05.2021, 8:52",
    history_text: "Такси в ожидании"
  },
  {
    history_date: "25.05.2021, 9:52",
    history_text: "Такси в ожидании"
  }
];
data.sort((a, b) => {
  //Парсим дату люто костыльнол (можно лучше использовать moment.js)
  const aDateParts = a.history_date.split(/[,\s|.|:]+/);
  const bDateParts = b.history_date.split(/[,\s|.|:]+/);

  //От этих блоков можно избавиться, если дату форматировать в YYYY-MM-DD HH:MM:SS
  const aDate = new Date();
  aDate.setFullYear(aDateParts[2]);
  aDate.setMonth(aDateParts[1]);
  aDate.setDate(aDateParts[0]);
  aDate.setHours(aDateParts[3]);
  aDate.setMinutes(aDateParts[4]);

  const bDate = new Date();
  bDate.setFullYear(bDateParts[2]);
  bDate.setMonth(bDateParts[1]);
  bDate.setDate(bDateParts[0]);
  bDate.setHours(bDateParts[3]);
  bDate.setMinutes(bDateParts[4]);

  if (aDate > bDate) return -1;
  else if (bDate < aDate) return 1;
  else return 0;
});

console.log(data);


Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы