Javascript 将对象数组的值映射到对象属性
如何将对象值数组转换为对象属性?我想把这个Javascript 将对象数组的值映射到对象属性,javascript,ecmascript-6,Javascript,Ecmascript 6,如何将对象值数组转换为对象属性?我想把这个 const array = [ { "age_group": [ { "range": "0-20", "total_count": 100 }, { "range": "21-30", "total_count": 200 }, ], "machine": { "name": "SK2DS0011",
const array = [
{
"age_group": [
{
"range": "0-20",
"total_count": 100
},
{
"range": "21-30",
"total_count": 200
},
],
"machine": {
"name": "SK2DS0011",
}
}
]
进入这个
[{name: "SK2DS0011", "0-20": 100, "21-30": 200}]
我一直在使用reduce
temp_arr = ori.reduce((accum, arr, i) => {
return accum['abc'] = arr.age_data.map(o => ({[o.range]: o.count}))
},{})
可能我在reduce中使用了map错误。在不使用
reduce
的情况下检查此解决方案。而是使用map
构建新数组:
const arr=[
{
“年龄组”:[
{
“范围”:“0-20”,
“总计数”:100
},
{
“范围”:“21-30”,
“总数”:200
},
],
“机器”:{
“名称”:“SK2DS0011”,
}
}
];
//使用“映射”可使用所需属性格式化新数组
让结果=arr.map((x)=>{
//获取“name”属性
设obj={
名称:x.machine.name,
};
//迭代“age_group”数组,并为每个元素添加一个属性
var thisTotal=0;
for(x.age_组中的var k){
设a=x.age_群[k];
obj[a.范围]=a.总计数;
//将此范围添加到总数中
thisTotal+=总计数;
}
//添加“total”属性
obj.total=此总数;
//返回最终数组
返回obj;
});
控制台日志(结果)
在不使用reduce
的情况下检查此解决方案。而是使用map
构建新数组:
const arr=[
{
“年龄组”:[
{
“范围”:“0-20”,
“总计数”:100
},
{
“范围”:“21-30”,
“总数”:200
},
],
“机器”:{
“名称”:“SK2DS0011”,
}
}
];
//使用“映射”可使用所需属性格式化新数组
让结果=arr.map((x)=>{
//获取“name”属性
设obj={
名称:x.machine.name,
};
//迭代“age_group”数组,并为每个元素添加一个属性
var thisTotal=0;
for(x.age_组中的var k){
设a=x.age_群[k];
obj[a.范围]=a.总计数;
//将此范围添加到总数中
thisTotal+=总计数;
}
//添加“total”属性
obj.total=此总数;
//返回最终数组
返回obj;
});
控制台日志(结果)
您可以使用数组#map
生成对象数组。对于每个年龄组
,您可以使用数组#映射
、排列语法和对象.assign()
创建范围和总计数对象。您可以使用array\u reduce
生成所有范围的总和
const数组=[{“年龄组”:[{“范围”:“0-20”,“总计数”:100},{“范围”:“21-30”,“总计数”:200},],“机器”:{“名称”:“SK2DS0011”,},
结果=数组.map({age\u group,machine})=>{
const{name}=machine;
const obj=Object.assign(…age_group.map({range,total_count})=>({[range]:total_count}));
const total=年龄组。reduce((s,o)=>s++o.total\u计数,0);
返回{name,…obj,total};
});
控制台日志(结果)
您可以使用数组#map
生成对象数组。对于每个年龄组
,您可以使用数组#映射
、排列语法和对象.assign()
创建范围和总计数对象。您可以使用array\u reduce
生成所有范围的总和
const数组=[{“年龄组”:[{“范围”:“0-20”,“总计数”:100},{“范围”:“21-30”,“总计数”:200},],“机器”:{“名称”:“SK2DS0011”,},
结果=数组.map({age\u group,machine})=>{
const{name}=machine;
const obj=Object.assign(…age_group.map({range,total_count})=>({[range]:total_count}));
const total=年龄组。reduce((s,o)=>s++o.total\u计数,0);
返回{name,…obj,total};
});
控制台日志(结果)代码>你可以解释得更多一点,而不仅仅是转储代码可以使用函数技术吗?如果我想要一个属性调用总计,它汇总了所有范围怎么办?你可以解释得更多一点,而不仅仅是转储代码可以使用函数技术吗?如果我想要一个属性调用总计,它汇总了所有范围怎么办?很好,但是这个太多的破坏性版本让东西很难读。不错,但是这个太多的破坏性版本让东西很难读。