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

VueJS动态个人作品集经历列表按开始日期及在职状态排序故障排查

故障根因

Array.prototype.sort的回调函数要求返回数值类型的结果:

  • 返回负数:比较项a排在b前面
  • 返回正数:比较项b排在a前面
  • 返回0:两者顺序保持不变

你的代码错误出在职状态判断的两个分支,直接返回了a、b对象而非合法数值,对象隐式转换为数字时会得到NaN,sort方法遇到NaN会直接保留元素原有顺序,因此排序逻辑完全不符合预期,同时你直接赋值原地排序后的数组,也可能出现Vue响应式检测不到更新的问题。

修复后代码
newExp() {
    this.editableExperience.sort((a,b) => {
        const aPeriod = a.period.split(' - ');
        const bPeriod = b.period.split(' - ');
        const aStartDate = aPeriod[0];
        const aEndDate = aPeriod[1];
        const bStartDate = bPeriod[0];
        const bEndDate = bPeriod[1];
        // 两者均为在职,按开始日期倒序
        if (aEndDate === 'Present' && bEndDate === 'Present') {
            return new Date(bStartDate) - new Date(aStartDate);
        } 
        // 仅a为在职,a排在前
        else if (aEndDate === 'Present') {
            return -1;
        } 
        // 仅b为在职,b排在前
        else if (bEndDate === 'Present') {
            return 1;
        } 
        // 均为离职,按开始日期倒序
        else {
            return new Date(bStartDate) - new Date(aStartDate);
        }
    })
    // 用展开运算符生成新数组赋值,保证Vue能监听到数组变化
    this.experience = [...this.editableExperience];
}
优化建议

可以提前把每段经历的开始日期、结束日期、是否在职作为单独字段存储,不需要每次排序都拆分period字符串,既提升排序性能,也方便后续字段扩展维护。

内容的提问来源于stack exchange,提问作者Rahul Mehta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:45:05