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

如何在不展开对象的情况下添加props?Map转数组问题求助

问题:将Map结构转换为指定格式的数组

需要转换的Map结构:

Map {
  0: { hangWithFriends: 100 },
  1: { Chill: 30, Book: 80 },
  2: { Yoga: 40 },
  3: { Birthday: 200 },
  4: { Gas: 70 },
  5: { Rent: 900, testingsub: 200 },
  6: { testSub: 500 }
}

目标数组格式:

[
     {date: 0, hangWithFriends: 100}, 
     {date:1, Chill: 30, Book:80}, 
     {date: 2, Yoga:40}, 
     {date: 3, Birthday:200}, 
     {date:4, Gas:70},  
     {date:5, Rent:900, testingsub:200}, 
     {date: 6, testSub: 500}
]

尝试的代码:

reducedMonths.forEach((date, obj) => {
  newData.push({ date, ...obj });
});

得到的错误结果:

Array(7) [
  { date: { hangWithFriends: 100 } }, 
  { date: { Chill: 30, Book: 80 } }, 
  { date: { Yoga: 40 } }, { date: { Birthday: 200 } },
  { date: { Gas: 70 } }, 
  { date: { Rent: 900, testingsub: 200 } }, 
  { date: { testSub: 500 } }
]

解答

你搞反了Map的forEach方法参数顺序。Map的forEach回调第一个参数是值(value),第二个才是键(key),你把顺序写反了,导致把Map里的对象值当成了date字段的内容,而真正的日期key没被用到。

修正后的代码:

const newData = [];
reducedMonths.forEach((obj, date) => {
  newData.push({ date: Number(date), ...obj });
});

也可以用更简洁的Array.from写法直接转换:

const newData = Array.from(reducedMonths, ([date, obj]) => ({
  date: Number(date),
  ...obj
}));

说明:

  • 调整forEach的参数顺序后,obj对应Map里的属性对象,date对应Map的键(也就是0-6这些数字)。
  • 因为Map的键会被存储为字符串类型,所以用Number(date)把它转成数字,和目标格式中的date字段类型一致。
  • 展开运算符...obj会自动把obj里的所有键值对合并到新对象中,不管属性数量多少都能处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:52:34