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

Uncaught TypeError报错排查:数组排序失败求助及代码优化

错误原因分析
  • 报错核心:inventor.passed是单个数字类型(比如爱因斯坦的1955),而sort()是数组专属方法,数字没有该方法,直接调用必然抛出TypeError。
  • 逻辑误区:你误用了map的作用——map是遍历数组每个元素做转换,你在迭代中取单个发明家的passed值(数字)并试图排序,完全搞错了操作对象。
解决方案

根据你的需求,分两种常见场景给出高效代码:

场景1:提取所有逝世年份并排序

若仅需把所有passed字段的值提取为数组后排序:

// 提取所有passed值 → 升序排序
const orderedPassedYears = inventors
  .map(inventor => inventor.passed)
  .sort((a, b) => a - b);

// 如需降序,将sort回调改为 b - a
// .sort((a, b) => b - a);

console.log(orderedPassedYears);

场景2:按逝世年份排序完整发明家数组

若要保留每个发明家的完整信息,仅按passed字段排序整个数组:

// 先拷贝原数组避免修改原始数据,再按passed升序排序
const orderedInventorsByPassed = [...inventors].sort((a, b) => a.passed - b.passed);

// 如需降序,将sort回调改为 b.passed - a.passed
// [...inventors].sort((a, b) => b.passed - a.passed);

console.log(orderedInventorsByPassed);
额外优化说明
  • 数字数组排序时,用a - b(升序)或b - a(降序)比三元运算符更简洁高效,无需写a.passed > b.passed ? +1 : -1这类冗余逻辑。
  • sort()会原地修改原数组,用扩展运算符[...inventors]先拷贝再排序,可避免污染原始数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:35:29