JavaScript按日期排序时如何将noDate为true的对象排在首位
数组排序需求实现方案
错误原因
你之前的排序逻辑仅判断了比较项中第一个元素是否携带noDate: true属性,未覆盖第二个元素携带该属性的场景,因此会出现排序结果不符合预期的问题。
正确实现代码
易读版(推荐)
data.sort((a, b) => { // 优先将带noDate: true的元素排在最前面 if (a.noDate && !b.noDate) return -1 if (!a.noDate && b.noDate) return 1 // 二者noDate状态一致时,按日期升序排序 return a.date - b.date })
简写版
利用布尔值转数字的特性简化逻辑(布尔值转数字时true对应1,false对应0):
data.sort((a, b) => Number(b.noDate) - Number(a.noDate) || a.date - b.date)
注意事项
如果你的date字段是日期字符串而非数字时间戳格式,需要先转换为时间戳再做比较:
data.sort((a, b) => { if (a.noDate && !b.noDate) return -1 if (!a.noDate && b.noDate) return 1 return new Date(a.date).getTime() - new Date(b.date).getTime() })
内容的提问来源于stack exchange,提问作者juhend23d
相关产品推荐
相关产品推荐

