如何将给定Object Array转换为指定结构的目标数组?
数组结构转换实现
给定如下输入对象数组:
const input = [ {"attributeGroup":"Compliance Information", "name":"specification", "value": "Medium"}, {"attributeGroup":"Compliance Information", "name":"specification", "value": "High"}, {"attributeGroup":"Compliance Information", "name":"complianceStatus", "value": "Pending"}, {"attributeGroup":"Compliance Information", "name":"complianceStatus", "value": "Rejected"}, {"attributeGroup":"Compliance Information", "name":"releasedDate", "value": "2023-08-30"}, {"attributeGroup":"Compliance Information", "name":"releasedDate", "value":"2023-08-31"} ];
需要将其转换为以下结构的目标数组:
[{ "ContextCode": "Compliance Information", "specification": "Medium", "complianceStatus": "Pending", "releasedDate": "2023-08-30" }, { "ContextCode": "Compliance Information", "specification": "High", "complianceStatus": "Rejected", "releasedDate": "2023-08-31" }]
解决方案
核心逻辑是先按字段名分组存储对应值,再根据值的数量批量构建目标对象:
function transformInput(input) { // 按name字段分组收集所有对应value const groupedValues = {}; let contextCode = ''; input.forEach(item => { contextCode = item.attributeGroup; if (!groupedValues[item.name]) { groupedValues[item.name] = []; } groupedValues[item.name].push(item.value); }); // 获取目标对象的数量(取第一个字段的数组长度) const fieldNames = Object.keys(groupedValues); const resultLength = groupedValues[fieldNames[0]].length; const result = []; // 循环构建每个目标对象 for (let i = 0; i < resultLength; i++) { const targetObj = { ContextCode: contextCode }; fieldNames.forEach(field => { targetObj[field] = groupedValues[field][i]; }); result.push(targetObj); } return result; } // 执行转换并输出结果 const transformedResult = transformInput(input); console.log(transformedResult);
代码说明
- 分组收集值:遍历输入数组,将每个
name对应的value存入数组,同时记录统一的ContextCode值; - 确定结果数量:通过分组后任意一个字段的数组长度,确定需要生成的目标对象总数;
- 构建目标对象:循环每个索引,为每个目标对象填充对应字段的第i个值,最终组成结果数组。
内容的提问来源于stack exchange,提问作者Abdul Manan Ali
相关产品推荐
相关产品推荐

