JS中如何对包含“week”字段的对象数组的日期属性进行排序?
带week标识的日期对象数组排序方案
原逻辑问题
你此前采用的字符串长度排序逻辑不成立,因为字符串长度与日期先后没有对应关系,例如2023 week 9长度短于2023 week 10但时间更早,而2022 week 52长度长于2023 week 1但时间更早,按长度排序必然得到混乱结果。
正确实现思路
从每个对象的text属性中提取出年份、周数两个数值,优先按年份排序,年份相同的场景下再按周数排序即可得到正确的时间顺序。
代码实现
按时间从早到晚升序排序
dateButtons.sort((a, b) => { // 提取所有数字,第一个为年份,第二个为周数,转为数值类型 const [yearA, weekA] = a.text.match(/\d+/g).map(Number) const [yearB, weekB] = b.text.match(/\d+/g).map(Number) // 优先比较年份 if (yearA !== yearB) { return yearA - yearB } // 年份相同再比较周数 return weekA - weekB })
按时间从晚到早降序排序
如果需要倒序排列,调整返回值的减数顺序即可:
dateButtons.sort((a, b) => { const [yearA, weekA] = a.text.match(/\d+/g).map(Number) const [yearB, weekB] = b.text.match(/\d+/g).map(Number) if (yearA !== yearB) { return yearB - yearA } return weekB - weekA })
内容的提问来源于stack exchange,提问作者Grant Solomons
相关产品推荐
相关产品推荐

