数据处理:一维数据转为二维数据的处理

227 阅读5分钟

1.需求:

需要处理的数据格式:

//要处理的数据
[
    {
        "MAINMATTER_UUID": "",
        "SITUATIONNAME": "",
        "DISTRICTNAME": "大连市",
        "MATTER_NUMBER": "7900-A-05000-140981",
        "WORKINGDAYS": "123",
        "MATTER_NAME": "母婴保健服务人员资格认定",
        "DEPT": "普通单位",
        "UUID": "5f03b3b2f5d111eb8cf5abf6df9923bb",
        "DISTRICTCODE": "140981000000",
        "HIERARCHY": "县级"
    },
    {
        "MAINMATTER_UUID": "",
        "SITUATIONNAME": "全部",
        "DISTRICTNAME": "大连市",
        "MATTER_NUMBER": "7900-A-16200-140981",
        "WORKINGDAYS": "123",
        "MATTER_NAME": "生鲜乳收购站许可",
        "DEPT": "普通单位",
        "UUID": "42604ac9f65211eb8cf5abf6df9923bb",
        "DISTRICTCODE": "140981000000",
        "HIERARCHY": "县级"
    },
    {
        "MAINMATTER_UUID": "7900-A-16200-140981",
        "SITUATIONNAME": "全部",
        "DISTRICTNAME": "大连市",
        "MATTER_NUMBER": "1100-F-00600-140981",
        "WORKINGDAYS": "123",
        "MATTER_NAME": "宅基地使用权",
        "DEPT": "普通单位",
        "UUID": "42686127f65211eb8cf5abf6df9923bb",
        "DISTRICTCODE": "140981000000",
        "HIERARCHY": "县级"
    },
    {
        "MAINMATTER_UUID": "7900-A-16200-140981",
        "SITUATIONNAME": "全部",
        "DISTRICTNAME": "大连市",
        "MATTER_NUMBER": "1300-Z-06500-140981",
        "WORKINGDAYS": "123",
        "MATTER_NAME": "房屋租赁合同网签备案、撤销",
        "DEPT": "普通单位",
        "UUID": "426be39df65211eb8cf5abf6df9923bb",
        "DISTRICTCODE": "140981000000",
        "HIERARCHY": "县级"
    },
    {
        "MAINMATTER_UUID": "7900-A-16200-140981",
        "SITUATIONNAME": "全部",
        "DISTRICTNAME": "大连市",
        "MATTER_NUMBER": "0400-A-01302-140981",
        "WORKINGDAYS": "123",
        "MATTER_NAME": "机动车变更登记",
        "DEPT": "普通单位",
        "UUID": "426d6a3ff65211eb8cf5abf6df9923bb",
        "DISTRICTCODE": "140981000000",
        "HIERARCHY": "县级"
    }
]
  • 需要处理的数据需要的特点是MAINMATTER_UUID为空

  • 处理后的子项目的"MAINMATTER_UUID"和父级别的"MATTER_NUMBER"是相等的,并且还需要添加自己到列表中,最后希望处理后的数据结构如下,

    {
            "MAINMATTER_UUID": "",
            "SITUATIONNAME": "全部",
            "DISTRICTNAME": "原平市",
            "MATTER_NUMBER": "7900-A-16200-140981",
            "WORKINGDAYS": "123",
            "MATTER_NAME": "生鲜乳收购站许可",
            "DEPT": "审批局",
            "UUID": "42604ac9f65211eb8cf5abf6df9923bb",
            "DISTRICTCODE": "140981000000",
            "HIERARCHY": "县级",
            "MAINMATTER_UNFOLD": [
                {
                    "MAINMATTER_UUID": "",
                    "SITUATIONNAME": "全部",
                    "DISTRICTNAME": "原平市",
                    "MATTER_NUMBER": "7900-A-16200-140981",
                    "WORKINGDAYS": "123",
                    "MATTER_NAME": "生鲜乳收购站许可",
                    "DEPT": "审批局",
                    "UUID": "42604ac9f65211eb8cf5abf6df9923bb",
                    "DISTRICTCODE": "140981000000",
                    "HIERARCHY": "县级"
                },
                {
                    "MAINMATTER_UUID": "7900-A-16200-140981",
                    "SITUATIONNAME": "全部",
                    "DISTRICTNAME": "原平市",
                    "MATTER_NUMBER": "1100-F-00600-140981",
                    "WORKINGDAYS": "123",
                    "MATTER_NAME": "宅基地使用权",
                    "DEPT": "审批局",
                    "UUID": "42686127f65211eb8cf5abf6df9923bb",
                    "DISTRICTCODE": "140981000000",
                    "HIERARCHY": "县级"
                }
            ]
        }
    
  • 为具有"MAINMATTER_UNFOLD"字段的数组(类似于children形式)

2.处理方法:

思考后发现,一维数组转为二维或者多维数据,肯定需要一个对象,来存储这很多特定key命名的键,以及与之对应的数组,来进行赋值操作。 所以

  • transformArr函数中,需要一个变量res数组来存贮最后的结果
  • 另外需要一个变量obj来存放键为MAINMATTER_UUID,值为所有MAINMATTER_UUIDkey相同的项目组成的数组
  function transformArr (arr) {
      //res是一层以及合并添加的数组
      var res = [];
      //所有由MAINMATTER_UUID为键的数组组成的对象
      var obj = {};
      //arr是所有所有有MAINMATTER_UUID的项
      arr
        .filter(function (item) {
          if (!item.MAINMATTER_UUID) {
            res.push(item);
          }
          return item.MAINMATTER_UUID;
        })
        .forEach(function (item) {
          if (!obj[item.MAINMATTER_UUID]) {
            obj[item.MAINMATTER_UUID] = [];
          }
          obj[item.MAINMATTER_UUID].push(item);
        });
​
      res.forEach(function (item) {
        if (obj[item.MATTER_NUMBER]) {
          var itemSmObj = JSON.parse(JSON.stringify(item));
          delete itemSmObj.MAINMATTER_UNFOLD;
          obj[item.MATTER_NUMBER].unshift(itemSmObj);
          item.MAINMATTER_UNFOLD = obj[item.MATTER_NUMBER];
        }
      });
      return res;
    },

处理结果:

[
    {
        "MAINMATTER_UUID": "",
        "SITUATIONNAME": "",
        "DISTRICTNAME": "原平市",
        "MATTER_NUMBER": "7900-A-05000-140981",
        "WORKINGDAYS": "123",
        "MATTER_NAME": "母婴保健服务人员资格认定",
        "DEPT": "审批局",
        "UUID": "5f03b3b2f5d111eb8cf5abf6df9923bb",
        "DISTRICTCODE": "140981000000",
        "HIERARCHY": "县级"
    },
    {
        "MAINMATTER_UUID": "",
        "SITUATIONNAME": "全部",
        "DISTRICTNAME": "原平市",
        "MATTER_NUMBER": "7900-A-16200-140981",
        "WORKINGDAYS": "123",
        "MATTER_NAME": "生鲜乳收购站许可",
        "DEPT": "审批局",
        "UUID": "42604ac9f65211eb8cf5abf6df9923bb",
        "DISTRICTCODE": "140981000000",
        "HIERARCHY": "县级",
        "MAINMATTER_UNFOLD": [
            {
                "MAINMATTER_UUID": "",
                "SITUATIONNAME": "全部",
                "DISTRICTNAME": "原平市",
                "MATTER_NUMBER": "7900-A-16200-140981",
                "WORKINGDAYS": "123",
                "MATTER_NAME": "生鲜乳收购站许可",
                "DEPT": "审批局",
                "UUID": "42604ac9f65211eb8cf5abf6df9923bb",
                "DISTRICTCODE": "140981000000",
                "HIERARCHY": "县级"
            },
            {
                "MAINMATTER_UUID": "7900-A-16200-140981",
                "SITUATIONNAME": "全部",
                "DISTRICTNAME": "原平市",
                "MATTER_NUMBER": "1100-F-00600-140981",
                "WORKINGDAYS": "123",
                "MATTER_NAME": "宅基地使用权",
                "DEPT": "审批局",
                "UUID": "42686127f65211eb8cf5abf6df9923bb",
                "DISTRICTCODE": "140981000000",
                "HIERARCHY": "县级"
            },
            {
                "MAINMATTER_UUID": "7900-A-16200-140981",
                "SITUATIONNAME": "全部",
                "DISTRICTNAME": "原平市",
                "MATTER_NUMBER": "1300-Z-06500-140981",
                "WORKINGDAYS": "123",
                "MATTER_NAME": "房屋租赁合同网签备案、撤销",
                "DEPT": "审批局",
                "UUID": "426be39df65211eb8cf5abf6df9923bb",
                "DISTRICTCODE": "140981000000",
                "HIERARCHY": "县级"
            },
            {
                "MAINMATTER_UUID": "7900-A-16200-140981",
                "SITUATIONNAME": "全部",
                "DISTRICTNAME": "原平市",
                "MATTER_NUMBER": "0400-A-01302-140981",
                "WORKINGDAYS": "123",
                "MATTER_NAME": "机动车变更登记",
                "DEPT": "审批局",
                "UUID": "426d6a3ff65211eb8cf5abf6df9923bb",
                "DISTRICTCODE": "140981000000",
                "HIERARCHY": "县级"
            }
        ]
    }
]