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

如何高效将含嵌套items对象数组的对象数组转换为扁平化对象数组?

解决方案:扁平化对象数组中的items字段

可以通过结合map和reduce方法实现需求,以下是具体代码:

const firstArray = [
  {
    amount: 343,
    code: "RCU8YI0NKS",
    items: [
      { productOne: "crust", quantity: 2.2 },
      { productTwo: "dust", quantity: 34 },
    ],
    user_id: "wewewefwOHG22323kj",
  },
  {
    amount: 343,
    code: "RCU8YI0NKS",
    items: [
      { productTwo: "dust", quantity: 32 },
      { productThree: "must", quantity: 34 },
    ],
    user_id: "m2LgLRD9MEVNAX56JTpRYDkOOjd2",
  },
];

const secondArray = firstArray.map(obj => {
  // 分离出items以外的属性
  const { items, ...baseProps } = obj;
  // 扁平化items数组,将产品名转为键,quantity转为对应值
  const flattenedItems = items.reduce((result, item) => {
    // 获取产品名称(匹配product开头的键对应的值)
    const productKey = Object.keys(item).find(k => k.startsWith('product'));
    result[item[productKey]] = item.quantity;
    return result;
  }, {});
  // 合并基础属性和扁平化后的产品数据
  return { ...baseProps, ...flattenedItems };
});

console.log(secondArray);

代码说明:

  • 遍历原数组:用map逐个处理数组中的每个对象,保证输出数组的结构和原数组一一对应。
  • 分离基础属性:通过对象解构把items字段单独提取,剩下的属性保留为基础属性集合。
  • 扁平化items:用reduce遍历每个items子数组,提取产品名称(通过匹配product开头的键),将其作为新对象的键,对应的quantity作为值存入结果对象。
  • 合并属性:用对象展开运算符把基础属性和扁平化后的产品数据合并,得到最终的目标对象。

简化场景处理:

如果确定items中的每个子对象只有一个product相关键和quantity键,也可以把提取产品名称的逻辑简化为:

const productName = Object.values(item)[0];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:22:58