数组组和reduce-Javascript
我要对以下阵列进行分组和缩减:数组组和reduce-Javascript,javascript,node.js,arrays,filter,reduce,Javascript,Node.js,Arrays,Filter,Reduce,我要对以下阵列进行分组和缩减: [ { "code": "202008001", "estado": "borrador", "cliente": "ENTEL", "tipo": "Administracion" }, {
[
{
"code": "202008001",
"estado": "borrador",
"cliente": "ENTEL",
"tipo": "Administracion"
},
{
"code": "202008002",
"estado": "borrador",
"cliente": "ENTEL",
"tipo": "Administracion"
},
{
"code": "202008002",
"estado": "borrador",
"cliente": "ENTEL",
"tipo": "Monitoreo Seguridad"
},
]
首先,我需要按code属性分组,然后按tipo合并或减少。这就是我想要的结果:
[
{
"code": "202008001",
"estado": "borrador",
"cliente": "ENTEL",
"tipos": ["Administracion"]
},
{
"code": "202008002",
"estado": "borrador",
"cliente": "ENTEL",
"tipos": ["Administracion","Monitoreo Seguridad"]
}
]
我只使用reduce测试了多个表单,但没有成功。谢谢 在reduce中,只需检查是否存在具有相同代码的项,如果存在,则推送到现有的.tipos。如果没有,则添加一个新项,但将tipo重命名为tipos并使其成为一个数组
const r=[
{
“代码”:“202008001”,
“estado”:“borrador”,
“客户”:“客户”,
“tipo”:“管理”
},
{
“代码”:“202008002”,
“estado”:“borrador”,
“客户”:“客户”,
“tipo”:“管理”
},
{
“代码”:“202008002”,
“estado”:“borrador”,
“客户”:“客户”,
“tipo”:“Monitoreo Seguridad”
},
].减少((进位,电流)=>{
const existing=carry.find((el)=>el.code==current.code);
如果(现有)现有tipo推送(当前tipo);
否则{
常数{tipo,…el}=电流;
推进({…el,tipos:[tipo]});
}
返运;
}, []);
控制台日志(r)代码>使用reduce构建一个对象,该对象由代码中的属性组成,最后从中获取值以获得所需的数组结果。
对于每个对象,如果它包含一个具有代码值的属性,我会查看结果对象。如果不是这样,则将此属性添加为新元素的存储值。在此之后,通过一个数组将属性tipo替换为内部的tipo。其他方法只是将新的tipo添加到tipo数组中
让arr=[
{
“代码”:“202008001”,
“estado”:“borrador”,
“客户”:“客户”,
“tipo”:“管理”
},
{
“代码”:“202008002”,
“estado”:“borrador”,
“客户”:“客户”,
“tipo”:“管理”
},
{
“代码”:“202008002”,
“estado”:“borrador”,
“客户”:“客户”,
“tipo”:“Monitoreo Seguridad”
},
];
让结果=对象值(arr.reduce)(acc,cur)=>{
如果(!acc.hasOwnProperty(cur)){
acc[当前代码]=当前;
acc[cur.code].tipo=[cur.tipo];
}否则{
附件tipo推送(当前tipo);
}
返回acc;
}, {}));
控制台日志(结果)代码>太棒了!我花了好几个小时想弄明白,非常感谢!!