首页 > 解决方案 > 从现有的 js 对象创建另一个不同格式的 js 对象

问题描述

我有一个函数以这种格式返回一个 js 对象

{ _id: { day: 21, month: 10, year: 2020 },
  TOTAL: 9,
  A: 4,
  B: 1,
  C: 1,
  D: 2 }

我必须将上述格式格式化为这种格式:

{ modalities:
   { TOTAL: { '21-09-2020': 2, '20-10-2020': 1, '21-10-2020': 8 },
     A: { '21-09-2020': 1, '21-10-2020': 4 },
     B: { '21-10-2020': 1 },
     C: { '21-09-2020': 1, '21-10-2020': 1 },
     D: { '20-10-2020': 1, '21-10-2020': 2 } } }

作为初学者,我对格式化没有太多经验,现在我正在考虑用 forEach 来实现它。有没有更好的方法在javascript中做到这一点?

标签: javascript

解决方案


let data = [
  {
    "_id": {
      "day": 21,
      "month": 10,
      "year": 2020
    },
    "TOTAL": 9,
    "XR": 4,
    "CT": 1,
    "MR": 1,
    "MG": 2
  },
  {
    "_id": {
      "day": 20,
      "month": 10,
      "year": 2020
    },
    "TOTAL": 1,
    "XR": 0,
    "CT": 0,
    "MR": 0,
    "MG": 1
  },
  {
    "_id": {
      "day": 21,
      "month": 9,
      "year": 2020
    },
    "TOTAL": 2,
    "XR": 1,
    "CT": 0,
    "MR": 1,
    "MG": 0
  }
];

let result = {
    modalities: {
        TOTAL: {},
        XR: {},
        CT: {},
        MR: {},
        MG: {}
    }
};

for (let element of data) {
    let date = element._id.day + '-' + element._id.month + '-' + element._id.year;
    result.modalities.TOTAL[date] = element.TOTAL;
    result.modalities.XR[date] = element.XR;
    result.modalities.CT[date] = element.CT;
    result.modalities.MR[date] = element.MR;
    result.modalities.MG[date] = element.MG;
}

console.log('result: ' + JSON.stringify(result));

样本输出

result: {
  "modalities": {
    "TOTAL": {
      "21-10-2020": 9,
      "20-10-2020": 1,
      "21-9-2020": 2
    },
    "XR": {
      "21-10-2020": 4,
      "20-10-2020": 0,
      "21-9-2020": 1
    },
    "CT": {
      "21-10-2020": 1,
      "20-10-2020": 0,
      "21-9-2020": 0
    },
    "MR": {
      "21-10-2020": 1,
      "20-10-2020": 0,
      "21-9-2020": 1
    },
    "MG": {
      "21-10-2020": 2,
      "20-10-2020": 1,
      "21-9-2020": 0
    }
  }
}

推荐阅读