Сортировать массив на основе времени и группы

1

скажем, у меня есть массив, который выглядит так

[ [AAAA, 2016-01-01, 1:00 PM, FA1], 
  [AAAA, 2016-01-01, 12:30 AM, FA1], 
  [BBBB, 2016-01-02, 6:00 PM, FA1], 
  [BBBB, 2016-01-02, 5:00 PM, FA1], 
  [CCCC, 2016-01-03, 9:00 PM, FA1], 
  [CCCC, 2016-01-03, 7:00 PM, FA1] ]

Как отсортировать данные, чтобы они выглядели так.

[ [AAAA, 2016-01-01, 12:30 AM, FA1], 
  [AAAA, 2016-01-01, 1:30 PM, FA1], 
  [BBBB, 2016-01-02, 5:00 PM, FA1], 
  [BBBB, 2016-01-02, 6:00 PM, FA1], 
  [CCCC, 2016-01-03, 7:00 PM, FA1], 
  [CCCC, 2016-01-03, 9:00 PM, FA1] ]

пока это мой код, как бы он не сортировался по времени

var inputarr = [
  ["AAAA", "2016-01-01, 1:00 PM", "FA1"],
  ["AAAA", "2016-01-01, 12:30 AM", "FA1"],
  ["BBBB", "2016-01-02, 6:00 PM", "FA1"],
  ["BBBB", "2016-01-02, 5:00 PM", "FA1"],
  ["CCCC", "2016-01-03, 9:00 PM", "FA1"],
  ["CCCC", "2016-01-03, 7:00 PM", "FA1"]
]



map = {};
for (var element in inputarr) {
  if (!map[inputarr[element][1]]) {
    map[inputarr[element][1]] = [];
  }
  map[inputarr[element][1]].push(inputarr[element]);
}
output = [];

for (var key in map) {
  output.push(map[key].shift());
  output.push(map[key].pop());
}
console.log(output);
  • 0
    Я сделал фрагмент и добавил кавычки вокруг строк
  • 0
    Вам нужно проанализировать время ИЛИ добавить пробел к часам <10 - тогда вы можете отсортировать строку даты
Теги:
sorting
google-apps-script

1 ответ

3

вы можете отсортировать дату с помощью объекта Date и строки с использованием метода string localCompare.

x = [
  ['AAAA', '2016-01-01', '1:00 PM', 'FA1'], 
  ['AAAA', '2016-01-01', '12:30 AM', 'FA1'], 
  ['BBBB', '2016-01-02', '6:00 PM', 'FA1'], 
  ['BBBB', '2016-01-02', '5:00 PM', 'FA1'], 
  ['CCCC', '2016-01-03', '9:00 PM', 'FA1'], 
  ['CCCC', '2016-01-03', '7:00 PM', 'FA1']
]

x.sort((a, b) => {
  let aDate = new Date('${a[1]} ${a[2]}'),
      bDate = new Date('${b[1]} ${b[2]}');

  if (+aDate == +bDate) {
    return a[0].localeCompare(b[0])
  }

  return aDate - bDate;
})

console.log(x)
  • 0
    в следующий раз. если у вас есть выбор использования объекта вместо массива, сделайте это. определить ключевую метку, например, дату, время и т. д., легче понять и отсортировать данные

Ещё вопросы

Сообщество Overcoder
Наверх
Меню