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

如何在JavaScript中创建带索引键的嵌套对象

问题:将产品数组转换为以递增数字为键的嵌套对象结构

当前使用以下代码通过flatMap和Object.fromEntries生成扁平结构的tmp_ff变量:

let tmp_ff = Object.fromEntries(
    this.choosen_products.flatMap((element, index) => [     
    [`q_p${index + 1}_fullname`, element.p_fullname],
    [`q_p${index + 1}_code`, element.p_code],
    [`q_p${index + 1}_category`, element.p_category],
    [`q_p${index + 1}_cost`, element.p_cost],
    [`q_p${index + 1}_margin`, element.p_margin],
    [`q_p${index + 1}_sell`, element.p_sell],
])

但需要将this.choosen_products转换为如下嵌套对象结构,键从1开始递增,每个键对应包含产品属性的子对象:

tmp_ff = {
  1: { p_fullname: "...", p_code: "...", p_category: "...", p_cost: "...", p_margin: "...", p_sell: "..." },
  2: { p_fullname: "...", p_code: "...", p_category: "...", p_cost: "...", p_margin: "...", p_sell: "..." },
  3: { p_fullname: "...", p_code: "...", p_category: "...", p_cost: "...", p_margin: "...", p_sell: "..." }
}
解决方案

直接使用Array.reduce方法即可生成目标嵌套结构,无需flatMap和Object.fromEntries:

let tmp_ff = this.choosen_products.reduce((acc, element, index) => {
  // 以index+1作为键(从1开始递增)
  acc[index + 1] = {
    p_fullname: element.p_fullname,
    p_code: element.p_code,
    p_category: element.p_category,
    p_cost: element.p_cost,
    p_margin: element.p_margin,
    p_sell: element.p_sell
  };
  return acc;
}, {}); // 初始值为空白对象

简化写法

如果原产品对象element的属性名和目标子对象的键完全一致,可直接用对象解构省略逐个属性的手动赋值:

let tmp_ff = this.choosen_products.reduce((acc, element, index) => {
  acc[index + 1] = { ...element };
  return acc;
}, {});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:45:17