Javascript 如何将[{id:1,var1:val1,var2:val2,varX:[time1,time2,time3]}]协调到[{id:1,var1:val1,var2:val2,varX1:time1,varX2:time2,varX3:time3}]

Javascript 如何将[{id:1,var1:val1,var2:val2,varX:[time1,time2,time3]}]协调到[{id:1,var1:val1,var2:val2,varX1:time1,varX2:time2,varX3:time3}],javascript,Javascript,我正在进行标题上显示的数据格式转换,但我不知道如何解决。我尝试编写blow代码,为二维数组添加变量名: const data = [ { id: 1, var1: 'val1', var2: 'val2', varX: ['time1', 'time2', 'time3'] }, { id: 2, var1: 'val2', var2: 'val3', varX: ['time4', 'time5', 'time6'] }, ]; const test = data.map((o) =

我正在进行标题上显示的数据格式转换,但我不知道如何解决。我尝试编写blow代码,为二维数组添加变量名:

const data = [
  { id: 1, var1: 'val1', var2: 'val2', varX: ['time1', 'time2', 'time3'] },
  { id: 2, var1: 'val2', var2: 'val3', varX: ['time4', 'time5', 'time6'] },
];

const test = data.map((o) => o.varX);

for (i = 0; i < test.length; i++) {
  const test2 = test[i].reduce((res, cur, idx) => {
    res[`varX${idx}`] = cur;
    return res;
  }, {});
  console.log(test2);
}

有谁能指导我如何转换数据吗?

由于
测试中的第一个映射,您只能对
varX
的值进行操作。您只需添加另一个操作即可将原始
数据[i]
对象与新的精简
varX
对象合并

const数据=[
{id:1,var1:'val1',var2:'val2',varX:['time1','time2','time3']},
{id:2,var1:'val2',var2:'val3',varX:['time4','time5','time6']},
];
常量测试=data.map((o)=>o.varX);
对于(i=0;i{
res[`varX${idx}`]=cur;
返回res;
}, {});
//排除varX并将新的varX${i}合并回数据[i]
const{varX,…test3}=Object.assign(数据[i],test2);
log(test3);

}
由于
测试中的第一个映射,您只能对
varX
的值进行操作。您只需添加另一个操作即可将原始
数据[i]
对象与新的精简
varX
对象合并

const数据=[
{id:1,var1:'val1',var2:'val2',varX:['time1','time2','time3']},
{id:2,var1:'val2',var2:'val3',varX:['time4','time5','time6']},
];
常量测试=data.map((o)=>o.varX);
对于(i=0;i{
res[`varX${idx}`]=cur;
返回res;
}, {});
//排除varX并将新的varX${i}合并回数据[i]
const{varX,…test3}=Object.assign(数据[i],test2);
log(test3);

}
代码的问题在于,通过仅映射具有
varX
的值,您将从
数据中提取非
varX
的属性。然后你在减少它们方面做得很好,但是你必须将“剩余”属性合并到新对象中,这听起来有点麻烦。相反,您可以执行以下操作:

const数据=[
{id:1,var1:“val1”,var2:“val2”,varX:[“time1”,“time2”,“time3”],
{id:2,var1:“val2”,var2:“val3”,varX:[“time4”,“time5”,“time6”],
];
常数测试=数据映射((o)=>{
返回Object.entries(o).reduce((p[k,v])=>{
如果(k==“varX”){
对于(让索引=0;索引控制台日志(测试)代码的问题在于,您只映射具有
varX
的值,从而从
数据中提取了非
varX
的属性。然后你在减少它们方面做得很好,但是你必须将“剩余”属性合并到新对象中,这听起来有点麻烦。相反,您可以执行以下操作:

const数据=[
{id:1,var1:“val1”,var2:“val2”,varX:[“time1”,“time2”,“time3”],
{id:2,var1:“val2”,var2:“val3”,varX:[“time4”,“time5”,“time6”],
];
常数测试=数据映射((o)=>{
返回Object.entries(o).reduce((p[k,v])=>{
如果(k==“varX”){
对于(让索引=0;索引控制台日志(测试)
在通过第二个
map()
方法将
varX
替换到此新对象之后,您需要在
reduce
方法而不是数组中创建对象

const data=[{'id':1,'var1':'val1','var2':'val2','varX':['time1','time2','time3']},
{'id':2,'var1':'val2','var2':'val3','varX':['time4','time5','time6']]
const test=data.map(item=>item.varX);
常量test2={}
对于(i=0;i{
返回{…acum,[`varX${index}`]:item};
}, {});
}
const dataX=data.map((项目、索引)=>{
删除item.varX
返回{…项,…test2[index]}
});

console.log(dataX)
您需要在
reduce
方法数组中创建对象,然后通过第二个
map()
方法将
varX
替换到此新对象

const data=[{'id':1,'var1':'val1','var2':'val2','varX':['time1','time2','time3']},
{'id':2,'var1':'val2','var2':'val3','varX':['time4','time5','time6']]
const test=data.map(item=>item.varX);
常量test2={}
对于(i=0;i{
返回{…acum,[`varX${index}`]:item};
}, {});
}
const dataX=data.map((项目、索引)=>{
删除item.varX
返回{…项,…test2[index]}
});
console.log(dataX)
[{id:1, var1:val1, var2:val2, varX1:time1, varX2:time2, varX3:time3},{id:2, var1:val2, var2:val3, varX1:time4, varX2:time5, varX3:time6}]