通过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
);
};
}
答案 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
);
};
}