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

如何优化多对象合并为结构化对象数组的实现方式?

高效合并多个对象为结构化对象数组的方案

需求背景

现有以下两个对象:

const costsObj = {
  Honda: 24000,
  BMW: 55000,
  Toyota: 22000
};

const stockObj = {
  Honda: 5,
  BMW: 1,
  Toyota: 2
};

需要合并为如下结构的对象数组:

const carsArr = [
  {brand: "Honda", cost: 24000, stock: 5},
  {brand: "BMW", cost: 55000, stock: 1},
  {brand: "Toyota", cost: 22000, stock: 2}
];

当前已有实现方式但较为繁琐,希望找到更高效的方案,尤其支持未来新增更多对象(比如新增model信息)的场景:

const carsArr = [
  {brand: "Honda", model: "Accord", cost: 24000, stock: 5},
  {brand: "BMW", model: "3 series", cost: 55000, stock: 1},
  {brand: "Toyota", model: "Camry", cost: 22000, stock: 2}
];

现有实现(供参考)

// 用costsObj创建初始数组
let carsArr = Object.keys(costsObj).map(brand => {
  return { brand, cost: costsObj[brand], stock: 0 };
});

// 从stockObj补充数据
for (const [key, value] of Object.entries(stockObj)) {
  carsArr.forEach((item, index)=>{
    if(item.brand == key) { // 注:原代码中item.term应为item.brand,此处修正笔误
      carsArr[index].stock = value;
    }
  })
};

优化方案

1. 针对两个对象的简化写法

直接在map中一次性获取两个对象的对应值,无需后续循环遍历,时间复杂度从O(n²)降到O(n):

const carsArr = Object.keys(costsObj).map(brand => ({
  brand,
  cost: costsObj[brand],
  stock: stockObj[brand] ?? 0 // 可选:添加默认值避免不存在的品牌出现undefined
}));

2. 支持多对象合并的通用方案

当需要合并更多对象(比如新增modelObj)时,定义字段与源对象的映射关系,核心逻辑无需修改即可扩展:

// 新增的model对象
const modelObj = {
  Honda: "Accord",
  BMW: "3 series",
  Toyota: "Camry"
};

// 定义字段映射:目标字段名 -> 对应的源对象
const fieldMap = {
  cost: costsObj,
  stock: stockObj,
  model: modelObj
};

// 获取所有品牌(假设所有源对象的key一致,以其中一个为准)
const brands = Object.keys(costsObj);

// 生成最终数组
const carsArr = brands.map(brand => {
  const car = { brand };
  for (const [field, sourceObj] of Object.entries(fieldMap)) {
    car[field] = sourceObj[brand] ?? null; // 可根据需求设置默认值
  }
  return car;
});

后续新增字段时,只需添加对应源对象并更新fieldMap即可,完全符合开闭原则。

3. 简洁的函数式写法(可选)

用Object.assign和展开语法进一步简化通用方案代码:

const carsArr = brands.map(brand => Object.assign(
  { brand },
  ...Object.entries(fieldMap).map(([field, obj]) => ({ [field]: obj[brand] }))
));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:15:05