如何合并对象数组中的firstName与lastName并返回指定格式数组?
问题解决:合并对象数组中的姓名字段
问题描述
需要将对象数组中每个元素的firstName与lastName合并为name字段,返回指定格式的对象数组,尝试使用map和forEach方法但未成功。
原始数据
[ { "id": 1321, "createdAt": "2022-08-03T12:36:20.096Z", "UpdatedAt": "2022-08-03T12:36:20.096Z", "firstName": "g", "lastName": "prashanth", "zipCode": "39493", "NPI": "990343" }, { "id": 1322, "createdAt": "2022-08-03T12:36:20.096Z", "UpdatedAt": "2022-08-03T12:36:20.096Z", "firstName": "prasilla", "lastName": "shaik", "zipCode": "39493", "NPI": "990343" } ]
尝试的代码
let final_array: any=[] data.forEach(function (value: any, a:any) { let obj: any={} console.log(a) final_array.push( obj[keys_array[a]] = data[a]["firstName"]+" " +data[a]["lastName"], obj[keys_array[a]] =data[a]["zipCode"], obj[keys_array[a]]=data[a]["NPI"]) }) });
期望输出
[ { "name": "g prashanth", "zipCode": "39493", "NPI": "990343" }, { "name": "prasilla shaik", "zipCode": "39493", "NPI": "990343" } ]
代码问题分析
你原来的代码存在几个关键问题:
keys_array未定义,导致无法正确设置对象的键名;- 重复使用
obj[keys_array[a]]作为键名,每次赋值都会覆盖之前的属性值; final_array.push()中传入的是多个赋值表达式的结果,而非完整的对象,无法得到期望的结构。
解决方案
方法一:使用map(推荐)
map方法专门用于将数组元素转换为新的结构,直接返回新数组,代码更简洁高效:
const transformedData = data.map(item => ({ name: `${item.firstName} ${item.lastName}`, zipCode: item.zipCode, NPI: item.NPI }));
方法二:使用forEach
如果坚持用forEach,需要先构建好完整对象再推入数组:
let final_array: any[] = []; data.forEach(item => { const obj = { name: `${item.firstName} ${item.lastName}`, zipCode: item.zipCode, NPI: item.NPI }; final_array.push(obj); });
两种方法都能得到你需要的输出结构,map更符合函数式编程的风格,代码更简洁,优先推荐使用。
内容的提问来源于stack exchange,提问作者1407
相关产品推荐
相关产品推荐

