Javascript 节点js从对象数组中创建特定模式的对象
从object数组创建对象时,我在for循环中遇到了一些问题。我在node js应用程序中有一个数组:Javascript 节点js从对象数组中创建特定模式的对象,javascript,node.js,Javascript,Node.js,从object数组创建对象时,我在for循环中遇到了一些问题。我在node js应用程序中有一个数组: [ { "Material": "113/133", "Name": [ { "name": "WELD1", "value": 27520 }, {
[
{
"Material": "113/133",
"Name": [
{
"name": "WELD1",
"value": 27520
},
{
"name": "WELD2",
"value": 676992
},
{
"name": "WELD3",
"value": 421
}
]
},
{
"Material": "150/300",
"Name": [
{
"name": "WELD1",
"value": 1441
},
{
"name": "WELD2",
"value": 555
},
{
"name": "WELD3",
"value": 100992
}
]
}
]
我想返回这样的对象,其中包含所有材质,如数组、名称和对象数组中的值,如下所示:
{
Material: ["113/133", "150/300"],
datasets: [
{
label: "WELD1",
data: [27520,1441]
},
{
label: "WELD2",
data: [676992,555]
},
{
label: "WELD3",
data: [100,20,0]
}
]
}
我想使用for循环获得结果。您可以使用.reduce()并执行以下操作:
{
Material: ["113/133", "150/300"],
datasets: [
{
label: "WELD1",
data: [27520,1441]
},
{
label: "WELD2",
data: [676992,555]
},
{
label: "WELD3",
data: [100,20,0]
}
]
}
var-arr=[
{
“材料”:“113/133”,
“姓名”:[
{
“名称”:“WELD1”,
“价值”:27520
},
{
“名称”:“WELD2”,
“价值”:676992
},
{
“名称”:“WELD3”,
“价值”:421
}
]
},
{
“材料”:“150/300”,
“姓名”:[
{
“名称”:“WELD1”,
“价值”:1441
},
{
“名称”:“WELD2”,
“价值”:555
},
{
“名称”:“WELD3”,
“价值”:100992
}
]
}
];
var newArr=arr.reduce((acc,ob)=>{
for(ob中的var键)
如果(acc[键]的类型=='对象')
acc[键]=acc[键]?acc[键]。concat(ob[键]):[ob[键];
其他的
acc[键]?acc[键]。按下(ob[键]):acc[键]=[ob[键];
返回acc;
}, {});
控制台日志(newArr)代码>使用数组。减少以使用现有数据构建新的数据结构
const start=[{
“材料”:“113/133”,
“姓名”:[{
“名称”:“WELD1”,
“价值”:27520
},
{
“名称”:“WELD2”,
“价值”:676992
},
{
“名称”:“WELD3”,
“价值”:421
}
]
},
{
“材料”:“150/300”,
“姓名”:[{
“名称”:“WELD1”,
“价值”:1441
},
{
“名称”:“WELD2”,
“价值”:555
},
{
“名称”:“WELD3”,
“价值”:100992
}
]
}
];
const end=start.reduce((tmp{
材料,
名称
}) => {
//处理材料
//如果阵列中不存在,则推送它
如果(!tmp.物料包括(物料)){
tmp.物料推送(物料);
}
//处理数据集
//看看每个名字
Name.forEach(({
名称
价值
}) => {
//我们能找到标签吗?
const labelFind=tmp.dataset.find(y=>y.label==name);
//如果找不到标签,请创建一个新的数据集
如果(!labelFind){
tmp.datasets.push({
标签:名称,
数据:[
价值
],
});
返回;
}
//如果我们发现它,则在数据集中推送新值
labelFind.data.push(值);
});
返回tmp;
}, {
材料:[],
数据集:[],
});
控制台日志(结束)代码>
let数组=[
{
“材料”:“113/133”,
“姓名”:[
{
“名称”:“WELD1”,
“价值”:27520
},
{
“名称”:“WELD2”,
“价值”:676992
},
{
“名称”:“WELD3”,
“价值”:421
}
]
},
{
“材料”:“150/300”,
“姓名”:[
{
“名称”:“WELD1”,
“价值”:1441
},
{
“名称”:“WELD2”,
“价值”:555
},
{
“名称”:“WELD3”,
“价值”:100992
}
]
}
]
让答案={Material:[],dataset:[]}
array.forEach(x=>{
回答。物料。推送(x物料);
x、 Name.forEach(na=>{
让object=answer.dataset.find(obj=>obj.label==na.name)|{label:,数据:[]};
如果(object.label==“”){
object.label=na.name;
object.data.push(na.value);
答案。数据集。推送(对象);
}否则{
object.data.push(na.value)
}
});
});
控制台日志(应答)代码>请分享您尝试作为一个的代码,并解释您遇到的问题。对于(var i=0;i