多个数组对象,没有的字段自动加上去。 特例显示。

发布时间 2023-12-22 10:56:52作者: 龙旋风
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>

</html>

<script>

  // 数组中查找某个属性的值 是否有个特殊的值
  function hasKpiName(array, targetValue) {
    return array.some(obj => obj.kpiName === targetValue);
  }

  // 在数组中查找某个字段,前一个字段的值和后一个字段的值
  function findPreviousAndNextValues(array, targetValue) {
    let index = array.indexOf(targetValue);
    if (index === -1) {
      // return "目标值不在数组中";
      return "";
    };
    let previousValue = array[index - 1];
    let nextValue = array[index + 1];
    if (index === 0) {
      // previousValue = "数组的第一个元素之前没有值";
      previousValue = "";
    };
    if (index === array.length - 1) {
      // nextValue = "数组的最后一个元素之后没有值";
      nextValue = "";
    };
    return {
      previousValue: previousValue,
      nextValue: nextValue
    };
  };

  let res = {
    "code": 200,
    "message": "操作成功",
    "data": {
      "modelName": "鱼场测试",
      "modelDescription": "鱼场测试",
      "resultDescription": null,
      "kpiList": [{
        "modKpiDTOList": [{
          "id": "1732288024775565314",
          "fid": null,
          "kpiName": "A类客户",
          "kpiValue": "1",
          "kpiUnit": "1000",
          "inputFlag": null,
          "paramsConfigTips": "A类测试"
        },
        {
          "id": "1732288024779759619",
          "fid": null,
          "kpiName": "C类客户",
          "kpiValue": "0",
          "kpiUnit": "1002",
          "inputFlag": null,
          "paramsConfigTips": "C类测试"
        },
        {
          "id": "1732288024783953921",
          "fid": null,
          "kpiName": "D类客户",
          "kpiValue": "0.0",
          "kpiUnit": "1003",
          "inputFlag": null,
          "paramsConfigTips": "D类测试"
        },
        {
          "id": "1732288024783953922",
          "fid": null,
          "kpiName": "F类客户",
          "kpiValue": "2.0",
          "kpiUnit": "1004",
          "inputFlag": null,
          "paramsConfigTips": "F类测试"
        },
        {
          "id": "1732288024792342530",
          "fid": null,
          "kpiName": "H类客户",
          "kpiValue": "11",
          "kpiUnit": "1005",
          "inputFlag": null,
          "paramsConfigTips": ""
        },
        {
          "id": "1732288024792342531",
          "fid": null,
          "kpiName": "U类客户",
          "kpiValue": "10",
          "kpiUnit": "1001",
          "inputFlag": null,
          "paramsConfigTips": ""
        },
        {
          "id": "1732288024796536833",
          "fid": null,
          "kpiName": "P类客户",
          "kpiValue": "9",
          "kpiUnit": "1006",
          "inputFlag": null,
          "paramsConfigTips": ""
        },
        {
          "id": "1732288024796536834",
          "fid": null,
          "kpiName": "T类客户",
          "kpiValue": "8",
          "kpiUnit": "1008",
          "inputFlag": null,
          "paramsConfigTips": ""
        },
        {
          "id": "1732288024800731137",
          "fid": null,
          "kpiName": "R类客户",
          "kpiValue": "7",
          "kpiUnit": "1009",
          "inputFlag": null,
          "paramsConfigTips": ""
        }
        ],
        "kpiCalculateTime": "2023-12-06 14:37:35"
      },
      {
        "modKpiDTOList": [{
          "id": "1732288230145466369",
          "fid": null,
          "kpiName": "A类客户",
          "kpiValue": "1",
          "kpiUnit": "1000",
          "inputFlag": null,
          "paramsConfigTips": "A类测试"
        },
        {
          "id": "1732288230149660674",
          "fid": null,
          "kpiName": "B类客户",
          "kpiValue": "0",
          "kpiUnit": "1001",
          "inputFlag": null,
          "paramsConfigTips": "B类测试"
        },
        {
          "id": "1732288230153854979",
          "fid": null,
          "kpiName": "D类客户",
          "kpiValue": "0.0",
          "kpiUnit": "1003",
          "inputFlag": null,
          "paramsConfigTips": "D类测试"
        },
        {
          "id": "1732288230153854980",
          "fid": null,
          "kpiName": "F类客户",
          "kpiValue": "2.0",
          "kpiUnit": "1004",
          "inputFlag": null,
          "paramsConfigTips": "F类测试"
        },
        {
          "id": "1732288230158049281",
          "fid": null,
          "kpiName": "G类客户",
          "kpiValue": "1",
          "kpiUnit": "1000",
          "inputFlag": null,
          "paramsConfigTips": ""
        },
        {
          "id": "1732288230158049282",
          "fid": null,
          "kpiName": "H类客户",
          "kpiValue": "2",
          "kpiUnit": "1005",
          "inputFlag": null,
          "paramsConfigTips": ""
        },

        {
          "id": "1732288230162243587",
          "fid": null,
          "kpiName": "P类客户",
          "kpiValue": "4",
          "kpiUnit": "1006",
          "inputFlag": null,
          "paramsConfigTips": ""
        },
        {
          "id": "1732288230162243588",
          "fid": null,
          "kpiName": "R类客户",
          "kpiValue": "5",
          "kpiUnit": "1009",
          "inputFlag": null,
          "paramsConfigTips": ""
        }
        ],
        "kpiCalculateTime": "2023-12-06 14:38:28"
      }
      ],
      "resultList": [{
        "modResultDTOList": [{
          "id": "1732288024817508353",
          "fid": null,
          "resultName": "综合结果1",
          "resultValue": "3",
          "resultUnit": "1000",
          "inputFlag": null
        },
        {
          "id": "1732288024821702658",
          "fid": null,
          "resultName": "综合结果2",
          "resultValue": "-1",
          "resultUnit": "1001",
          "inputFlag": null
        }
        ],
        "resCalculateTime": "2023-12-06 14:37:35"
      },
      {
        "modResultDTOList": [{
          "id": "1732288230183215106",
          "fid": null,
          "resultName": "综合结果1",
          "resultValue": "3",
          "resultUnit": "1000",
          "inputFlag": null
        },
        {
          "id": "1732288230183215107",
          "fid": null,
          "resultName": "综合结果2",
          "resultValue": "-1",
          "resultUnit": "1001",
          "inputFlag": null
        }
        ],
        "resCalculateTime": "2023-12-06 14:38:28"
      }
      ],
      "modResultExplainList": [{
        "modResultExplainDTOList": [{
          "id": "1732288152555036674",
          "fid": null,
          "resultExplain": "测试正常",
          "sort": null,
          "modResultExplainId": 1732288024830091265
        }]
      },
      {
        "modResultExplainDTOList": [{
          "id": "1732288375717175298",
          "fid": null,
          "resultExplain": "测试正常",
          "sort": null,
          "modResultExplainId": 1732288230191603713
        }]
      }
      ]
    }
  };

  const { data } = res;

  let Asort = [];
  let modKpiList = {};
  for (let i = 0; i < data.kpiList.length; i++) {
    const element = data.kpiList[i]['modKpiDTOList'];
    modKpiList[`modKpiList${i}`] = [];
    for (let j = 0; j < element.length; j++) {
      const elementUpData = element[j]['kpiName'];
      modKpiList[`modKpiList${i}`].push(elementUpData);
      if (Asort.includes(elementUpData)) {
      } else {
        Asort.push(elementUpData);
      };
    };
  };

  // console.log(JSON.stringify(Asort));
  // console.log(JSON.stringify(modKpiList));

  // Asort = ["A类客户", "C类客户", "D类客户", "F类客户", "H类客户", "U类客户", "P类客户", "T类客户", "R类客户", "B类客户", "G类客户"];
  // modKpiList = {
  //   "modKpiList0": ["A类客户", "C类客户", "D类客户", "F类客户", "H类客户", "U类客户", "P类客户", "T类客户", "R类客户"],
  //   "modKpiList1": ["A类客户", "B类客户", "D类客户", "F类客户", "G类客户", "H类客户", "P类客户", "R类客户"]
  // };

  let lossModKpiList = {};
  for (let key of Object.keys(modKpiList)) {
    lossModKpiList[key] = Asort.filter(item => !modKpiList[key].includes(item));
  };
  // console.log(JSON.stringify(lossModKpiList));
  // lossModKpiList = { "modKpiList0": ["B类客户", "G类客户"], "modKpiList1": ["C类客户", "U类客户", "T类客户"] };

  for (const key in lossModKpiList) {
    if (Object.hasOwnProperty.call(lossModKpiList, key)) {
      const element = lossModKpiList[key];
      for (let index = 0; index < element.length; index++) {
        const elementList = element[index];
        for (const keylist in modKpiList) {
          if (Object.hasOwnProperty.call(modKpiList, keylist)) {
            const elementKpiList = modKpiList[keylist];
            if (keylist !== key) {
              const result = findPreviousAndNextValues(elementKpiList, elementList);
              if (!!result['previousValue'] && modKpiList[key].includes(result['previousValue']) && !modKpiList[key].includes(result[key])) {
                let previousIndex = modKpiList[key].indexOf(result['previousValue']);
                modKpiList[key].splice(previousIndex + 1, 0, elementList);
              } else if (!!result['nextValue'] && modKpiList[key].includes(result['nextValue']) && !modKpiList[key].includes(result[key])) {
                let nextIndex = modKpiList[key].indexOf(result['nextValue']);
                modKpiList[key].splice(nextIndex, 0, elementList);
              }
            }
          }
        }
      }
    }
  };

  
  console.log(modKpiList);
  
  let dataUp = JSON.parse(JSON.stringify(data));

  for (let i = 0; i < data.kpiList.length; i++) {
    const element = data.kpiList[i]['modKpiDTOList'];

    console.log(JSON.stringify(element));
    console.log(JSON.stringify(modKpiList[`modKpiList${i}`]));
    
    // 对数组遍历
    dataUp.kpiList[i]['modKpiDTOList'] = [];
    for (let u = 0; u < modKpiList[`modKpiList${i}`].length; u++) {
      let elementu = modKpiList[`modKpiList${i}`][u];
      if (hasKpiName(element, elementu)) {
        for (let t = 0; t < element.length; t++) {
          if (elementu == element[t]['kpiName']) {
            dataUp.kpiList[i]['modKpiDTOList'].push(element[t]);
          }
        };
      } else {

        let setD = {
          kpiName: elementu,
          fid: null,
          id: "",
          inputFlag: null,
          kpiUnit: "",
          kpiUnitCode: null,
          kpiValue: "",
          paramsConfigTips: "xxxxxx",
        }


        
        console.log(JSON.stringify(data.kpiList));
        console.log(elementu);
        

        for (let r = 0; r < data.kpiList.length; r++) {
          const elementDeeplist = data.kpiList[r]['modKpiDTOList'];
          for (let k = 0; k < elementDeeplist.length; k++) {
            const elementK = elementDeeplist[k];
            if (elementK['kpiName'] == elementu) {
              setD['paramsConfigTips'] = elementK['paramsConfigTips'];
              // setD['kpiUnit'] = elementK['kpiUnit'];
              break;
            }
          }
        }


        dataUp.kpiList[i]['modKpiDTOList'].push(setD);
      };
    };
  };

  
  console.log(dataUp);
  

</script>