Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
数组组和reduce-Javascript_Javascript_Node.js_Arrays_Filter_Reduce - Fatal编程技术网

数组组和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;
}, {}));

控制台日志(结果)太棒了!我花了好几个小时想弄明白,非常感谢!!