如何按属性值对对象数组排序?Typescript类型报错如何解决?
错误原因
Array.sort()的回调函数要求所有执行路径都必须返回number类型值,你当前的代码仅在a.holiday_on === b.holiday_on的分支返回了数值,其余分支无返回值,因此触发了返回值类型不匹配、存在未返回值的代码路径两类报错。
修正代码
如果你的排序规则是先按holiday_on日期升序排列,日期相同时按holiday_for降序排列,可以用以下代码实现:
const sorted = holidays.sort((a: IHoliday, b: IHoliday) => { // 日期不同时按日期升序排列,YYYY-MM-DD格式字符串直接按字典序对比即可,无需转Date if (a.holiday_on !== b.holiday_on) { return a.holiday_on.localeCompare(b.holiday_on); } // 日期相同时按holiday_for降序排列 return b.holiday_for - a.holiday_for; });
如果你不需要调整日期不同的数据的相对顺序,只处理同日期的排序,将不同日期分支的返回值改为0即可:
const sorted = holidays.sort((a: IHoliday, b: IHoliday) => { if (a.holiday_on === b.holiday_on) { return b.holiday_for - a.holiday_for; } return 0; });
额外提示
Array.sort()是原地排序方法,会直接修改原数组,如果需要保留原数组不变,可以先拷贝再排序:
const sorted = [...holidays].sort(/* 排序回调同上 */)
内容的提问来源于stack exchange,提问作者RAHUL KUNDU
相关产品推荐
相关产品推荐

