如何在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
相关产品推荐
相关产品推荐

