如何高效将含嵌套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
相关产品推荐
相关产品推荐

