Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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 使用array.reduce()的复杂嵌套分组_Javascript_Node.js - Fatal编程技术网

Javascript 使用array.reduce()的复杂嵌套分组

Javascript 使用array.reduce()的复杂嵌套分组,javascript,node.js,Javascript,Node.js,您好,我正在尝试使用array.reduce()为以下场景获得正确的分组: 以下是我的起始阵列: { { descriptionFunction: "Change", processDate: "2019-12-12", transactionEffectiveDate: "2019-12-12",

您好,我正在尝试使用array.reduce()为以下场景获得正确的分组:

以下是我的起始阵列:

    {
              {
                descriptionFunction: "Change",
                processDate: "2019-12-12",
                transactionEffectiveDate: "2019-12-12",
                policyEffectiveDate: "2019-09-09",
                policyExpirationDate: "2020-09-09",
                documentID: "1234"
              },
              {
                descriptionFunction: "Change",
                processDate: "2019-12-06",
                transactionEffectiveDate: "2019-12-07",
                policyEffectiveDate: "2019-09-09",
                policyExpirationDate: "2020-09-09",
                documentID: "1235"
              },
              {
                descriptionFunction: "Change",
                processDate: "2019-11-29",
                transactionEffectiveDate: "2019-11-29",
                policyEffectiveDate: "2018-09-09",
                policyExpirationDate: "2019-09-09",
                documentID: "1236"
              },
              {
                descriptionFunction: "Change",
                processDate: "2019-11-29",
                transactionEffectiveDate: "2019-11-29",
                policyEffectiveDate: "2018-09-09",
                policyExpirationDate: "2019-09-09",
                documentID: "1237"
              }
 }
        
以下是我需要想到的:

  {
    "policyEffectiveDate": "2019-09-09",
    "policyExpirationDate": "2020-09-09",
    "transactions": [
      {
        "transactionEffectiveDate": "2019-12-12",
        "descriptionFunction": "Change",
        "documents": [
          {
            "descriptionSubType": "Policy",
            "documentID": "1234"
          }
        ]
      },
      {
        "transactionEffectiveDate": "2019-12-07",
        "descriptionFunction": "Change",
        "documents": [
          {
            "descriptionSubType": "Policy",
            "documentID": "1235"
          }
        ]
      }
    ]
  },
  {
    "policyEffectiveDate": "2018-09-09",
    "policyExpirationDate": "2019-09-09",
    "transactions": [
      {
        "transactionEffectiveDate": "2018-11-29",
        "descriptionFunction": "Change",
        "documents": [
          {
            "descriptionSubType": "Policy",
            "documentID": "1236"
          },
          {
            "descriptionSubType": "Policy",
            "documentID": "1237"
          }
        ]
      }
    ]
  }

因此,输出中有两组,第一组按policyEffectiveDate和policyExpirationDate,第二组按transactionEffectiveDate。我正在努力找出如何使用array.reduce结构实现复杂分组。

这里有一些您可以使用的东西:)

const searchArray=[
{
descriptionFunction:“更改”,
处理日期:“2019-12-12”,
交易生效日期:“2019-12-12”,
保单生效日期:“2019-09-09”,
保单到期日期:“2020-09-09”,
documentID:“1234”,
},
{
descriptionFunction:“更改”,
处理日期:“2019-12-06”,
交易生效日期:“2019-12-07”,
保单生效日期:“2019-09-09”,
保单到期日期:“2020-09-09”,
documentID:“1235”,
},
{
descriptionFunction:“更改”,
处理日期:“2019-11-29”,
交易生效日期:“2019-11-29”,
政策生效日期:“2018-09-09”,
保单到期日期:“2019-09-09”,
documentID:“1236”,
},
{
descriptionFunction:“更改”,
处理日期:“2019-11-29”,
交易生效日期:“2019-11-29”,
政策生效日期:“2018-09-09”,
保单到期日期:“2019-09-09”,
documentID:“1237”,
},
];
const arr=searchArray.reduce((acc,child)=>{
//您需要检查“acc”是否包含子数组的策略日期的子数组。
//所以
让policyDate=acc.find(
(ch)=>
ch.policyEffectiveDate==child.policyEffectiveDate&&
ch.policyExpirationDate==child.policyExpirationDate
);
//如果找不到,创建一个并将其推到“acc”`
如果(!保单日期){
保单日期={
policyEffectiveDate:child.policyEffectiveDate,
policyExpirationDate:child.policyExpirationDate,
交易:[],
};
acc.push(保单日期);
}
//在此之后,我们将查看policyDate.transactions,如果有
//数据包含“transactionEffectiveDate”和“descriptionFunction”`
让transactionData=policyDate.transactions.find(
(ch)=>
ch.transactionEffectiveDate==child.transactionEffectiveDate&&
ch.descriptionFunction==子.descriptionFunction
);
//我们要再次检查这个物体是否在那里
如果(!transactionData){
//如果没有,请为我们创建一个
transactionData={
transactionEffectiveDate:child.transactionEffectiveDate,
descriptionFunction:child.descriptionFunction,
文件:[],
};
policyDate.transactions.push(transactionData);
}
//在此之后,我们将推送transactionData.documents
transactionData.documents.push({
//既然child.descriptionSubType不存在,我们可以这样做吗?
//我看不到您在哪里找到“descriptionSubType”`
descriptionSubType:child.descriptionSubType | |“策略”,
documentID:child.documentID,
});
返回acc;
}, []);
控制台日志(arr);
尝试使用for循环

  • 尝试制作一个“二维数组”,并将其作为策略生效日期
  • 将所有具有相同策略生效日期的对象按同一键,然后可以继续

  • 试着去做。这很容易。您将学到很多。

    您可以通过获取用于凿孔的键数组和用于实际标高的其他键,以及嵌套数组中的键来指定所需的嵌套

    这适用于任意计数的嵌套级别进行分组

    var数据=[{描述函数:“变更”,处理日期:“2019-12-12”,交易生效日期:“2019-12-12”,保单生效日期:“2019-09-09”,保单到期日期:“2020-09-09”,文档ID:“1234”},{描述函数:“变更”,处理日期:“2019-12-06”,交易生效日期:“2019-12-07”,保单生效日期:“2019-09-09”,policyExpirationDate:“2020-09-09”,documentID:“1235”},{描述函数:“更改”,处理日期:“2019-11-29”,交易生效日期:“2019-11-29”,policyEffectiveDate:“2018-09-09”,policyExpirationDate:“2019-09-09”,documentID:“1236”},{描述函数:“更改”,处理日期:“2019-11-29”,交易生效日期:“2019-11-29”,保单生效日期:“2018-09-09”,保单到期日期:“2019-09-09”,文档ID:“1237”},
    组=[
    ['policyEffectiveDate','policyExpirationDate','transactions'],
    ['transactionEffectiveDate','descriptionFunction','documents'],
    [未定义,'documentID',未定义]
    ],
    结果=数据。减少((r,o)=>{
    groups.reduce((p,[组,…属性])=>{
    函数setProperties(目标={}){
    forEach(k=>target[k]=o[k]);
    回报目标;
    }
    var collection=properties.pop(),
    临时雇员
    如果(!组){
    p、 push(setProperties());
    返回[];
    }
    temp=p.find(q=>o[group]==q[group]);
    如果(!temp){
    p、 push(temp=setProperties({[group]:o[group]}));
    临时[收集]=[];
    }
    返回温度[收集];
    },r)
    返回r;
    }, []);
    console.log(结果);

    .as控制台包装{最大高度:100%!重要;顶部:0;}
    单个文档的解决方案:

    const事务=[{
    descriptionFunction:“更改”,
    处理日期:“2019-12-12”,
    交易生效日期:“2019-12-12”,
    保单生效日期:“2019-09-09”,
    保单到期日期:“2020-09-09”,
    文档ID:“1234”
    }, {
    descriptionFunction:“更改”,
    处理日期:“2019-12-06”,
    交易生效日期:“2019-12-07”,
    保单生效日期:“2019-09-09”,
    保单到期日期:“2020-09-09”,
    文档ID: