You need to enable JavaScript to run this app. JavaScript如何通过map方法将对象数组转为type为键、count为值的对象
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何通过map方法将对象数组转为type为键、count为值的对象

问题根源

你多次调整写法仍得不到预期结果,核心是两点偏差:

  1. 方法选型错配:map的设计目标是对原数组每一项做映射,最终返回和原数组长度完全相等的新数组。哪怕你补全map里的return逻辑,最终输出也会是单键对象组成的数组(形如[{adults:2}, {children:3}, {infants:3}]),和你要的单扁平对象目标完全不符。
  2. 动态对象键写法遗漏:你卡在return部分的写法,本质是没掌握JS计算属性语法:如果要把变量的值作为对象的键名,必须把动态变量包在方括号内,即{ [type]: count };如果直接写{ type: count },只会生成固定键名type的对象,完全拿不到预期的动态键效果。
正确实现方案

方案1:最优解(reduce实现)

reduce专门用于数组迭代后把结果聚合为单个值,完全适配数组转对象的场景:

this.passengerSelectedCounts = this.passengerList.reduce((acc, { type, count }) => {
  // 将当前项的type作为键、count作为值,写入累加容器
  acc[type] = count;
  return acc;
}, {}); // 迭代初始值设为空对象,作为最终结果的容器

方案2:传统for循环实现

如果你更习惯之前尝试过的for循环写法,逻辑和reduce完全一致,只是手动完成遍历:

// 初始化空对象承载最终结果
const countMap = {};
for (const item of this.passengerList) {
  countMap[item.type] = item.count;
}
this.passengerSelectedCounts = countMap;

不推荐:硬套现有map代码的冗余写法

如果你非要基于当前写的map片段调整,必须在map外层增加一步对象合并操作,属于绕远的冗余实现,不建议日常开发使用:

// map的return部分需要使用计算属性语法
this.passengerSelectedCounts = Object.assign(
  {},
  ...this.passengerList.map(({type, count}) => ({ [type]: count }))
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 13:24:07