按日期或字符串排序

时间:2019-09-25 16:25:42

标签: javascript sorting

通过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 :(得分:0)

因此,就像注释部分建议的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
    );
  };
}
相关问题