如何将JS对象数组转换为以Instance值为键的指定结构数组?
JavaScript 数据结构转换实现方案
基础实现(匹配你的示例需求)
直接用数组map方法遍历原数据,结合对象解构就能快速完成转换:
// 你的原始数据 const originalData = [ { Instance: 'USM 1', performance: '<DanPac_A>.<Daniel.DanOPCHub>.<A Session.Perfomance>', agc: '<DanPac_A>.<Daniel.DanOPCHub>.<A Session.AGC>', snr: '<DanPac_A>.<Daniel.DanOPCHub>.<A Session.SNR>', sos: '<DanPac_A>.<Daniel.DanOPCHub>.<A Session.SNR>', flowvel: '<DanPac_A>.<Daniel.DanOPCHub>.<A Session.SNR>', }, ]; // 转换逻辑 const transformedData = originalData.map(item => { // 把Instance字段单独拎出来,剩下的属性打包成rest对象 const { Instance, ...rest } = item; // 返回以Instance为键、值为包含rest的数组的新对象 return { [Instance]: [rest] }; }); console.log(transformedData);
运行这段代码后,输出结构完全符合你的要求。
进阶:合并相同Instance的多条数据
如果原数组里有多个Instance相同的对象,想把它们的属性都归集到同一个数组里,用reduce方法就能实现:
const originalData = [ { Instance: 'USM 1', performance: 'val1', agc: 'val2' }, { Instance: 'USM 1', performance: 'val3', agc: 'val4' }, { Instance: 'USM 2', performance: 'val5', agc: 'val6' }, ]; const transformedData = Object.values(originalData.reduce((acc, item) => { const { Instance, ...rest } = item; // 没有该Instance的键就新建数组,有就直接push新数据 acc[Instance] = acc[Instance] || []; acc[Instance].push(rest); return acc; }, {})); console.log(transformedData);
这段代码的输出会把同Instance的数据合并到对应数组中,结构如下:
[ { 'USM 1': [ { performance: 'val1', agc: 'val2' }, { performance: 'val3', agc: 'val4' } ] }, { 'USM 2': [ { performance: 'val5', agc: 'val6' } ] } ]
内容的提问来源于stack exchange,提问作者Abhinav
相关产品推荐
相关产品推荐

