

新闻资讯
技术学院本教程详细阐述如何在JavaScript中将一个对象数组进行结构转换。核心目标是将原对象数组中每个元素的特定键(如`Instance`)的值提取出来,作为新对象的新键,而原对象中剩余的属性则作为该新键的值(通常包裹在一个数组中)。我们将利用`Array.prototype.map()`方法结合对象解构赋值和计算属性名来实现高效且声明式的数据重塑。
在数据处理和前端开发中,我们经常需要根据特定的业务需求对数据结构进行调整。一个常见的场景是将一个包含多个对象的数组,转换为一个以特定属性值为键,其余属性为值的新对象数组。例如,我们可能有一个如下所示的原始数据结构:
const originalArray = [
{
Instance: 'USM 1',
performance: '..',
agc: '..',
snr: '..',
sos: '..',
flowvel: '..',
},
// ... 更多类似对象
]; 我们的目标是将其转换为以下期望的结构:
[
{
'USM 1': [
{
performance: 'value',
agc: 'value',
// ... 其他属性
},
],
},
// ... 更多类似对象
];这种转换要求我们将每个对象中的 Instance 属性的值作为新对象的主键,而原对象中除了 Instance 之外的所有属性则构成一个新对象,并作为新主键对应的值(包裹在一个数组中)。
JavaScript提供了强大的数组和对象操作方法,可以简洁高效地实现这种数据转换。我们将主要使用以下三个ES6+特性:
下面是实现上述转换的代码示例:
const originalArray = [
{
Instance: 'USM 1',
performance: 'zuojiankuohaophpcnDanPac_Ayoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnA Session.Perfomanceyoujiankuohaophpcn',
ag
c: 'zuojiankuohaophpcnDanPac_Ayoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnA Session.AGCyoujiankuohaophpcn',
snr: 'zuojiankuohaophpcnDanPac_Ayoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnA Session.SNRyoujiankuohaophpcn',
sos: 'zuojiankuohaophpcnDanPac_Ayoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnA Session.SNRyoujiankuohaophpcn',
flowvel: 'zuojiankuohaophpcnDanPac_Ayoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnA Session.SNRyoujiankuohaophpcn',
},
{
Instance: 'USM 2',
performance: 'zuojiankuohaophpcnDanPac_Byoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnB Session.Perfomanceyoujiankuohaophpcn',
agc: 'zuojiankuohaophpcnDanPac_Byoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnB Session.AGCyoujiankuohaophpcn',
snr: 'zuojiankuohaophpcnDanPac_Byoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnB Session.SNRyoujiankuohaophpcn',
sos: 'zuojiankuohaophpcnDanPac_Byoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnB Session.SNRyoujiankuohaophpcn',
flowvel: 'zuojiankuohaophpcnDanPac_Byoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnB Session.SNRyoujiankuohaophpcn',
},
];
const transformedArray = originalArray.map(({ Instance, ...item }) => ({
[Instance]: [item],
}));
console.log(transformedArray);让我们逐步分解上述代码的工作原理:
originalArray.map(...): map() 方法会遍历 originalArray 中的每一个对象。对于数组中的每个元素,它会调用提供的回调函数,并将回调函数的返回值收集到一个新的数组中。
({ Instance, ...item }) => ...: 这是 map() 方法的回调函数,它接收一个参数,即当前正在处理的数组元素(一个对象)。
({ [Instance]: [item] }): 这是回调函数返回的新对象。
执行上述代码,将得到以下输出:
[
{
'USM 1': [
{
performance: 'zuojiankuohaophpcnDanPac_Ayoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnA Session.Perfomanceyoujiankuohaophpcn',
agc: 'zuojiankuohaophpcnDanPac_Ayoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnA Session.AGCyoujiankuohaophpcn',
snr: 'zuojiankuohaophpcnDanPac_Ayoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnA Session.SNRyoujiankuohaophpcn',
sos: 'zuojiankuohaophpcnDanPac_Ayoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnA Session.SNRyoujiankuohaophpcn',
flowvel: 'zuojiankuohaophpcnDanPac_Ayoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnA Session.SNRyoujiankuohaophpcn',
},
],
},
{
'USM 2': [
{
performance: 'zuojiankuohaophpcnDanPac_Byoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnB Session.Perfomanceyoujiankuohaophpcn',
agc: 'zuojiankuohaophpcnDanPac_Byoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnB Session.AGCyoujiankuohaophpcn',
snr: 'zuojiankuohaophpcnDanPac_Byoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnB Session.SNRyoujiankuohaophpcn',
sos: 'zuojiankuohaophpcnDanPac_Byoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnB Session.SNRyoujiankuohaophpcn',
flowvel: 'zuojiankuohaophpcnDanPac_Byoujiankuohaophpcn.zuojiankuohaophpcnDaniel.DanOPCHubyoujiankuohaophpcn.zuojiankuohaophpcnB Session.SNRyoujiankuohaophpcn',
},
],
},
];通过熟练运用 Array.prototype.map()、对象解构赋值和计算属性名,开发者可以优雅且高效地完成各种复杂的数据重塑任务,从而更好地适应不同的数据消费需求。