<!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>