根据ID的特定性别数据拆分一个组合列表

问题描述 投票:0回答:1

这里是一个组合列表,有唯一的ageCode。

    [
      {
        "ageCode": 1,
        "ageDesc": "0-4",
        "qM": 358,
        "sM": 158,
        "qF": 328,
        "sF": 258
      },
      {
        "ageCode": 3,
        "ageDesc": "15-59",
        "qM": 525,
        "sM": 125
      },
      {
        "ageCode": 4,
        "ageDesc": "60+",
        "qF": 458,
        "sF": 358
      }
    ]

组合列表需要根据年龄码是否同时存在M & F值而被分割成单个对象。转换后的列表是这样的。如果没有 "M "日期,那么就没有 "性别 "的对象。"M "同样适用于 "F"

    [
      {
        "ageCode": 1,
        "ageDesc": "0-4",
        "q": 358,
        "s": 158,
        "gender": "M"
      },
      {
        "ageCode": 1,
        "ageDesc": "0-4",
        "q": 328,
        "s": 258,
        "gender": "F"
      },
      {
        "ageCode": 3,
        "ageDesc": "15-59",
        "q": 525,
        "s": 125,
        "gender": "M"
      },
      {
        "agCode": 4,
        "ageDesc": "60+",
        "q": 458,
        "s": 358,
        "gender": "F"
      }
    ]

解决方案试过了。

      for(let item  of this.ageData) {
            if (this.ageData.find((i) => { i.agCode=== item.agCode})){

    //}

        }

这里需要解决重复和多次for循环的问题,有什么有效的方法来实现这个目标吗?

angular angular7 angular8
1个回答
2
投票

试试下面的代码

const combined = [
  {
    "ageCode": 1,
    "ageDesc": "0-4",
    "qM": 358,
    "sM": 158,
    "qF": 328,
    "sF": 258
  },
  {
    "ageCode": 3,
    "ageDesc": "15-59",
    "qM": 525,
    "sM": 125
  },
  {
    "ageCode": 4,
    "ageDesc": "60+",
    "qF": 458,
    "sF": 358
  }
];

const original = combined.reduce((result, item) => {
  if (item.qM !== undefined) {
    result.push({
      "ageCode": item.ageCode,
      "ageDesc": item.ageDesc,
      "q": item.qM,
      "s": item.sM,
      "gender": "M"
    });
  }
  if (item.qF !== undefined) {
    result.push({
      "ageCode": item.ageCode,
      "ageDesc": item.ageDesc,
      "q": item.qF,
      "s": item.sF,
      "gender": "F"
    });
  }
  return result;
}, []);

console.log(original);
© www.soinside.com 2019 - 2024. All rights reserved.