【问题标题】:sort array of date-months in ascending order of type string [duplicate]按字符串类型的升序对日期-月份数组进行排序[重复]
【发布时间】:2021-08-19 16:04:18
【问题描述】:
var months = ["April 2021","March 2021", "May 2021", "April 2020"];

如何获取字符串类型的这些月份的升序。

let monthArray = ["January", "Febraury", "March", "April", "May", "June",
    "July", "August", "September", "October", "November", "December"];

let preparedArray = [];

months.forEach(month => {
    let mntSplit = month.split(' ');
    preparedArray.push({year: mntSplit[1], month: mntSplit[0] });
});

如何进行升序排序,请帮忙

【问题讨论】:

  • 你能发布你想要的输出数组的例子吗
  • resultExpected = ["2020 年 4 月","2021 年 3 月","2021 年 4 月","2021 年 5 月"] 喜欢这个

标签: javascript arrays


【解决方案1】:

使用sort()Date() 构造函数

var months = ["April 2021", "March 2021", "May 2021", "April 2020"]

var sorted = months.sort((a, b) => new Date(a) - new Date(b))

console.log(sorted)

更新:(不适用于 Firefox)

var months = ["April 2021", "March 2021", "May 2021", "April 2020"]

var sorted = months.sort((a, b) => new Date('01 ' + a) - new Date('01 ' + b))

console.log(sorted)

【讨论】:

  • 在火狐浏览器中不工作
  • @ShaikHabeeb 对不起,我从来不知道。这是由于列表中缺少日期。
  • 谢谢@User863 它有帮助
【解决方案2】:

如果你想保留你的代码,你可以使用这个:

var months = ["April 2021","March 2021", "May 2021", "April 2020"];
let monthArray = ["January", "Febraury", "March", "April", "May", "June",
    "July", "August", "September", "October", "November", "December"];

months = months.sort((a,b)=>{
  const [monthA, yearA] = a.split(' '),
        [monthB, yearB] = b.split(' ');
  if (yearA === yearB)
    return monthArray.indexOf(monthA) - monthArray.indexOf(monthB);
  return +yearA - +yearB
})

console.log(months)

否则使用new Date()排序:

months.sort((a, b) => new Date(a) - new Date(b))

【讨论】:

  • months.sort((a, b) => new Date(a) - new Date(b)) 它在 Firefox 中不起作用
猜你喜欢
  • 1970-01-01
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多