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

JavaScript如何将对象数组转为嵌套对象及??=语法报错如何解决

问题解决

报错原因

你遇到的编译报错是因为逻辑空赋值运算符??=属于ES2021新增语法,你当前项目的Babel转译配置没有包含对应语法的支持,因此webpack无法识别该语法。

兼容旧环境的最优实现

你写的两种实现逻辑都是正确的,只需要把??=替换为普通的属性存在性判断即可适配现有环境,不需要额外修改配置。

reduce版本(更推荐的函数式写法)

const result = items.reduce((acc, curr) => {
  if (!acc[curr.mod]) {
    acc[curr.mod] = {}
  }
  acc[curr.mod][curr.part] = curr.price
  return acc
}, {})

forEach版本

const structure = {}
items.forEach(item => {
  if (!structure[item.mod]) {
    structure[item.mod] = {}
  }
  structure[item.mod][item.part] = item.price
})

补充说明:map方法的设计目的是将原数组的每一项做映射转换,返回等长的新数组,不适合用来做聚合为单个对象的场景,因此你之前尝试用map无法构建嵌套结构是正常的。

保留??=语法的配置方案

如果想要继续使用新语法,需要给Babel添加对应转译插件:

  1. 安装依赖:
npm install --save-dev @babel/plugin-proposal-logical-assignment-operators
  1. 在项目Babel配置文件的plugins数组中添加插件:
{
  "plugins": ["@babel/plugin-proposal-logical-assignment-operators"]
}
  1. 重启开发服务即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:48:02