You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按属性值对对象数组排序?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:57:04