首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由数字组成的字符串数组的排序

由数字组成的字符串数组的排序
EN

Stack Overflow用户
提问于 2018-03-19 18:30:58
回答 3查看 70关注 0票数 0

我有以下数组,其中包含字符串;

代码语言:javascript
复制
let data = ["2018-1", "2018-5", "2018-11", "2018-2", "2018-10", "2018-12"];

这些字符串由数字(年份和月份)组成。

你能告诉我为什么不执行排序功能吗?我需要对这个数组从最近的日期到最老的日期排序。在本例中,从"2018-12"“2018-1”。

我在整个项目中使用的是房客,所以我也尝试在这里使用它。

代码语言:javascript
复制
var result = _.sortBy(data, function(i) {
  var x = i.split("-").map(Number);
  return [x[0], x[1]];
});

你能告诉我为什么这段代码不能工作,以及如何修复它吗?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-19 18:40:12

我又加了几个日期作为证据。

代码语言:javascript
复制
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);

票数 2
EN

Stack Overflow用户

发布于 2018-03-19 18:39:25

不幸的是,sortBy不支持复合键,因此数组键被转换为字符串。解决办法要么是提供两个单独的键:

代码语言:javascript
复制
var result = _.sortBy(data, [
    x => Number(x.split('-')[0]),
    x => Number(x.split('-')[1]),
]);

或者合成一个数字的:

代码语言:javascript
复制
var result = _.sortBy(data, x => {
    x = x.split('-');
    return Number(x[0]) * 1000 + Number(x[1])
});

最后,您可以冒险尝试Date.parse

代码语言:javascript
复制
var result = _.sortBy(data, Date.parse)

这看起来很整洁,但需要一些跨浏览器的测试。

票数 1
EN

Stack Overflow用户

发布于 2018-03-19 19:19:59

你可以把分裂的三角洲连成一年和一个月。

代码语言:javascript
复制
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);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49370047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档