Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点js从对象数组中创建特定模式的对象_Javascript_Node.js - Fatal编程技术网

Javascript 节点js从对象数组中创建特定模式的对象

Javascript 节点js从对象数组中创建特定模式的对象,javascript,node.js,Javascript,Node.js,从object数组创建对象时,我在for循环中遇到了一些问题。我在node js应用程序中有一个数组: [ { "Material": "113/133", "Name": [ { "name": "WELD1", "value": 27520 }, {

从object数组创建对象时,我在for循环中遇到了一些问题。我在node js应用程序中有一个数组:

[
        {
            "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