【问题标题】:How to arrange years in order in js如何在js中按顺序排列年份
【发布时间】:2022-08-04 00:44:42
【问题描述】:

你好我有这个数组

{
2015,
2016,
2017,
2018,
2019,
22/23,
21/22,
20/21,
19/20
}

我该怎么做才能以如此有序的方式显示它?

22/23
21/22
20/21
19/20
2019
2018
2017
2016
2015
  • 该输入数据结构无效。它是一个数组而不是一个对象,那些带有/ 的元素需要被引用,因为它们是字符串。也许应该引用所有元素(为方便起见)......?
  • 您可能需要编写自己的自定义排序函数,将这些“斜线日期”转换为数字并返回两个字符串中哪个更高

标签: javascript arrays


【解决方案1】:

您可以执行自己的自定义排序功能。所以如果你的数组是这样的:

var array = [
"2015",
"2016",
"2017",
"2018",
"2019",
"22/23",
"21/22",
"20/21",
"19/20"
]

你可以在里面创建一个带有函数的排序:

array.sort(function(x1, y1) {
  x = x1.slice(-2);
  y = y1.slice(-2);

  if (x > y) {
    return -1;
  }
  if (x < y) {
    return 1;
  }
  return 0;
});

现在,如果我们控制台日志,我们会看到:

"22/23"
"21/22"
"20/21"
"19/20"
"2019"
"2018"
"2017"
"2016"
"2015"

现在你有了这个概念,你可以玩它并将它推到一个新的水平。

【讨论】:

  • 也可以使用“宇宙飞船”运算符&lt;=&gt;
  • 当然,我只是试图让它变得如此简单,以便让 OP 尽可能地理解它。
【解决方案2】:

由于您的输入数组无效...

  1. 您使用了对象表示法 ({})
  2. 其中带斜线的元素是字符串,需要加引号

    ...这是一个修复这些错误的示例,并为您提供了一个按升序排列的数组。

    const arr = [
      2015,
      2016,
      2017,
      2018,
      2019,
      '22/23',
      '21/22',
      '20/21',
      '19/20'
    ];
    
    // Coerce `a` and `b` to strings and compare
    // the last two characters
    arr.sort((a, b) => {
      return b.toString().slice(-2) - a.toString().slice(-2);
    });
    
    console.log(arr);

【讨论】:

    【解决方案3】:

    您可以实现自定义排序回调来比较解析的数字:

    const data = [
      '2015',
      '2016',
      '2017',
      '2018',
      '2019',
      '22/23',
      '21/22',
      '20/21',
      '19/20'
    ]
    
    const sorted = data.sort((a, b) => {
      const parseValue = input => {
        const parts = input.split('/')
        
        if (parts.length === 2) {
          // Convert `19/20` to 1920
          return parseInt(parts[1] + parts[0], 10)
        }
        return parseInt(input, 10)
      }
      
      const result = parseValue(b) - parseValue(a)
      
      if (result === 0) {
        // If equal, add with `/` first
        return b.includes('/') ? 1 : -1
      }
      
      return result
    })
    
    console.log(sorted)

    【讨论】:

      猜你喜欢
      • 2018-03-28
      • 2022-08-11
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多