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

如何在JavaScript的map函数中返回追加新属性的对象?

解决方法

你的推测完全正确:map 函数的回调必须返回值,否则默认返回 undefined,这就是result数组全是undefined的原因。虽然你已经成功给原student对象追加了属性,但没把处理后的对象返回给map,所以无法生成正确的结果数组。

有两种常见的处理方式:

方式一:返回修改后的原对象(会修改原数组)

直接在map回调末尾返回处理后的student对象即可:

const result = students.map((student) => {
  student.classRoomNo2016 = getHistoricalData(student, 2016, 'classRoomNo')
  student.marks2016 = getHistoricalData(student, 2016, 'marks')
  student.classAttended2016 = getHistoricalData(student, 2016, 'classAttended')
  return student; // 新增:返回处理后的对象
})

这种方式会直接修改原responseData.students里的元素,适合允许修改原数据的场景。

方式二:返回新对象(不修改原数据,推荐)

用对象扩展运算符复制原对象的所有属性,再添加新属性,避免修改原数据产生副作用:

const result = students.map((student) => {
  return {
    ...student,
    classRoomNo2016: getHistoricalData(student, 2016, 'classRoomNo'),
    marks2016: getHistoricalData(student, 2016, 'marks'),
    classAttended2016: getHistoricalData(student, 2016, 'classAttended')
  };
})

额外优化:简化getHistoricalData函数

当前函数用map遍历后取第一个有效结果,效率较低,改用find可以直接找到第一个符合条件的历史数据,更高效:

const getHistoricalData = (student, year, key) => {
  const targetData = student.historyDataList.find(item => {
    return item.shivirdetails && item.shivirdetails.year == year && item[key];
  });
  return targetData ? targetData[key] : undefined;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:09:23