Сортировка по дате или строке - PullRequest
0 голосов
/ 25 сентября 2019

Через API я мог получить два типа значения, т. Е. Число или дату значения определенного ключа.Например:

var data = [{ title: 'A', value: '10' }, { title: 'B', value: '9' }, { title: 'C', value: '20' }, { title: 'D', value: '14' }];

или

var data = [{ title: 'A', value: 'November 11, 2019' }, { title: 'B', value: 'January 12, 2019' }, { title: 'C', value: 'October 28, 2019' }, { title: 'D', value: 'March 13, 2018' }]

Я использовал универсальную функцию сортировки для сортировки значения.Мне нужна помощь, чтобы настроить его для значения типа даты.

Используемый код:


export function compareValues(key, order = 'ascending') {
  return function (a, b) {
    if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {
      return 0;
    }
    let comparison = 0;

    const varA = (typeof a[key] === 'string') ?
      a[key].toUpperCase() : a[key];
    const varB = (typeof b[key] === 'string') ?
      b[key].toUpperCase() : b[key];


    if (varA > varB) {
      comparison = 1;
    } else if (varA < varB) {
      comparison = -1;
    }
    return (
      (order == 'descending') ? (comparison * -1) : comparison
    );
  };
}

1 Ответ

0 голосов
/ 25 сентября 2019

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

import moment from 'moment';

export function compareValues(key, order = 'ascending') {
  return function (a, b) {
    if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {
      return 0;
    }
    let comparison = 0;

    if (isNaN(a[key]) && isNaN(b[key])) {
      var aDate = moment(a[key]);
      var bDate = moment(b[key]);

      if (aDate.isValid() && bDate.isValid()) {

        var difference = aDate.diff(bDate);
        if (difference > 1) {
          comparison = 1;
        } else {
          comparison = -1;
        }
      }
    }


    const varA = (typeof a[key] === 'string') ?
      a[key].toUpperCase() : a[key];
    const varB = (typeof b[key] === 'string') ?
      b[key].toUpperCase() : b[key];

    if (comparison === 0) {
      if (varA > varB) {
        comparison = 1;
      } else if (varA < varB) {
        comparison = -1;
      }
    }
    return (
      (order == 'descending') ? (comparison * -1) : comparison
    );
  };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...