Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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_Group By_Lodash - Fatal编程技术网

Javascript 节点JS |根据名称和日期差异对项目进行分组

Javascript 节点JS |根据名称和日期差异对项目进行分组,javascript,node.js,group-by,lodash,Javascript,Node.js,Group By,Lodash,问题陈述 我正试图根据我所能做到的公司名称来组织工作经验。但是,我只想在它们是连续工作时对它们进行分组。LinkedIn也实现了同样的逻辑。 我认为需要一种基于名称和日期差异对项目进行分组的递归方法。 比如说 const data = [ { Position: '1' CompanyName: 'Microsoft', StartDate: '2017-01-01', EndDate: '2017-04-01' }

问题陈述

我正试图根据我所能做到的公司名称来组织工作经验。但是,我只想在它们是连续工作时对它们进行分组。LinkedIn也实现了同样的逻辑。 我认为需要一种基于名称和日期差异对项目进行分组的递归方法。 比如说

const data = [
    {
        Position: '1'
        CompanyName: 'Microsoft',
        StartDate: '2017-01-01',
        EndDate: '2017-04-01'
    },
    {
        Position: '2'
        CompanyName: 'Microsoft',
        StartDate: '2017-04-01',
        EndDate: '2017-10-01'
    },
        {
        Position: '3'
        CompanyName: 'Amazon',
        StartDate: '2017-10-01',
        EndDate: '2018-02-01'
    },
    {
        Position: '4'
        CompanyName: 'Microsoft',
        StartDate: '2018-03-04',
        EndDate: '2018-10-04'
    }
];
目前,我可以使用以下代码在NodeJS中按公司名称分组

代码

现在我的输出是

   [ 
     CompanyName: 'Microsoft': [
     {
        Position: '1'   
        StartDate: '2017-01-01',
        EndDate: '2017-04-01'
    }, {
        Position: '2'
        StartDate: '2017-04-01',
        EndDate: '2017-10-01'
    }, {
        Position: '4'
        StartDate: '2018-03-04',
        EndDate: '2018-10-04'
    }
    ],
      CompanyName: 'Amazon' :
      [
        {
        Position: '3'
        StartDate: '2017-10-01',
        EndDate: '2018-02-01'
       }
      ]
   ]
预期产量

因此,由于第4位不是连续日期,因此不应将其分组,对此有何想法? 如果日期差超过一个月,我不想分组。

在纯JavaScript中,我将使用reduce来完成任务。还请让我知道这是否完成了所需的任务

var数据=[{位置:'1',公司名称:'Microsoft',起始日期:'2017-01-01',结束日期:'2017-04-01'},{位置:'2',公司名称:'Microsoft',起始日期:'2017-04-01',结束日期:'2017-10-01'},{位置:'3',公司名称:'SaClient',起始日期:'2017-10-01',结束日期:'2018-02-01'},{职位:'4',公司名称:'Microsoft',起始日期:'2018-03-04',结束日期:'2018-10-04'}]; var结果= data.reduceAc,{CompanyName,…rest}=>{ acc[公司名称]=acc[公司名称]| |[]; ifacc[CompanyName]。长度>0{ lastEndDt=acc[CompanyName][acc[CompanyName].length-1].EndDate; 差异=Math.ceilMath.absnew DatelastEndDt-new Daterest.StartDate/1000*60*60*24;
如果差异您可以使用预期输出共享虚拟数组数据吗?完成,我已使用虚拟数据更新了任何其他建议?看起来很有趣?问题是您的预期输出不是有效的数组或对象。它应该是一致的。位置4应作为单独的array@TusharNarang我已经更新了我的答案,看看我对她做了什么e是一家公司的所有无序数据都将进入该公司的单独数组。好的,它将是递归的,或者如果发现两个非连续日期,它将创建两个单独的microsoft_无序。@TusharNarang nope,它将合并到同一个数组中。假设发现两个以上的无序公司,它将移动到同一个键Microsft_无序的,那么我将对无序的应用相同的逻辑,对吗?
   [ 
     CompanyName: 'Microsoft': [
     {
        Position: '1'   
        StartDate: '2017-01-01',
        EndDate: '2017-04-01'
    }, {
        Position: '2'
        StartDate: '2017-04-01',
        EndDate: '2017-10-01'
    }, {
        Position: '4'
        StartDate: '2018-03-04',
        EndDate: '2018-10-04'
    }
    ],
      CompanyName: 'Amazon' :
      [
        {
        Position: '3'
        StartDate: '2017-10-01',
        EndDate: '2018-02-01'
       }
      ]
   ]
   [ 
     CompanyName: 'Microsoft': [
     {
        Position: '1'   
        StartDate: '2017-01-01',
        EndDate: '2017-04-01'
    }, {
        Position: '2'
        StartDate: '2017-04-01',
        EndDate: '2017-10-01'
    }
    ],
      CompanyName: 'Amazon' :
      [
        {
        Position: '3'
        StartDate: '2017-10-01',
        EndDate: '2018-02-01'
       }
      ],
      CompanyName: 'Microsoft' :
      [
        {
        Position: '4'
        StartDate: '2018-03-04',
        EndDate: '2018-10-04'
       }
      ]
   ]