我有以下数组,其中包含字符串;
let data = ["2018-1", "2018-5", "2018-11", "2018-2", "2018-10", "2018-12"];这些字符串由数字(年份和月份)组成。
你能告诉我为什么不执行排序功能吗?我需要对这个数组从最近的日期到最老的日期排序。在本例中,从"2018-12"到“2018-1”。
我在整个项目中使用的是房客,所以我也尝试在这里使用它。
var result = _.sortBy(data, function(i) {
var x = i.split("-").map(Number);
return [x[0], x[1]];
});你能告诉我为什么这段代码不能工作,以及如何修复它吗?谢谢。
发布于 2018-03-19 18:40:12
我又加了几个日期作为证据。
let data = ["2018-1", "2018-5", "2018-11", "2018-2", "2018-10", "2018-12", "2017-5", "2019-12"];
var result = data.sort((a, b) => {
var n1 = a.split("-");
var n2 = b.split("-");
n1 = parseInt(n1[0]) * 100 + parseInt(n1[1]);
n2 = parseInt(n2[0]) * 100 + parseInt(n2[1]);
return n1 - n2;
})
console.log(result);
发布于 2018-03-19 18:39:25
不幸的是,sortBy不支持复合键,因此数组键被转换为字符串。解决办法要么是提供两个单独的键:
var result = _.sortBy(data, [
x => Number(x.split('-')[0]),
x => Number(x.split('-')[1]),
]);或者合成一个数字的:
var result = _.sortBy(data, x => {
x = x.split('-');
return Number(x[0]) * 1000 + Number(x[1])
});最后,您可以冒险尝试Date.parse
var result = _.sortBy(data, Date.parse)这看起来很整洁,但需要一些跨浏览器的测试。
发布于 2018-03-19 19:19:59
你可以把分裂的三角洲连成一年和一个月。
var data = ["2018-1", "2018-5", "2018-11", "2018-2", "2018-10", "2018-12", "2017-5", "2019-12"],
result = data.sort((a, b) => {
var aa = a.split("-"),
bb = b.split("-");
return aa[0] - bb[0] || aa[1] - bb[1];
});
console.log(result);
https://stackoverflow.com/questions/49370047
复制相似问题