JS merges the data with the same key in the array object (merges objects with the same attribute in the array into one array) two solutions

let resData = [
      {
    
    
        "name": "住院医疗最高报销",
        "tagName": "医疗",
        "insuredAmount": "6000"
      },
      {
    
    
        "name": "身故赔付",
        "tagName": "寿险",
        "insuredAmount": "36.00"
      },
      {
    
    
        "name": "烦死了免费陈述事实",
        "tagName": "寿险",
        "insuredAmount": "8888.00"
      },
      {
    
    
        "name": "你好,噜噜噜",
        "tagName": "寿险",
        "insuredAmount": "66.00"
      },
      {
    
    
        "name": "120种重大疾病确诊赔付",
        "tagName": "重疾",
        "insuredAmount": "350000"
      }
    ]

The desired result is:

let Data = [
      {
    
    
        "tagName": "医疗",
        dataInfo: [
          {
    
    
            "name": "住院医疗最高报销",
            "tagName": "医疗",
            "insuredAmount": "6000"
          }
        ]
      },
      {
    
    
        "tagName": "寿险",
        dataInfo: [
          {
    
    
            "name": "身故赔付",
            "tagName": "寿险",
            "insuredAmount": "36.00"
          },
          {
    
    
            "name": "烦死了免费陈述事实",
            "tagName": "寿险",
            "insuredAmount": "8888.00"
          },
          {
    
    
            "name": "你好,噜噜噜",
            "tagName": "寿险",
            "insuredAmount": "66.00"
          },
        ]
      },
      {
    
    
        "tagName": "重疾",
        dataInfo: [
          {
    
    
            "name": "120种重大疾病确诊赔付",
            "tagName": "重疾",
            "insuredAmount": "350000"
          }
        ]
      }
    ]

method one:

let tempArr = [];
let Data = [];
for (let i = 0; i < resData.length; i++) {
    
    
   if (tempArr.indexOf(resData[i].tagName) === -1) {
    
    
     Data.push({
    
    
       tagName: resData[i].tagName,
       dataInfo: [resData[i]]
     });
     tempArr.push(resData[i].tagName);
   } else {
    
    
     for (let j = 0; j < Data.length; j++) {
    
    
       if (Data[j].tagName == resData[i].tagName) {
    
    
         Data[j].dataInfo.push(resData[i]);
         break;
       }
     }
   }
 }
 console.log(Data);

Method Two:

let dataInfo = {
    
    };
resData.forEach((item, index) => {
    
    
	let {
    
     tagName } = item;
	if (!dataInfo[tagName]) {
    
    
		dataInfo[tagName] = {
    
    
			tagName,			
			child: []
		}
	}
	dataInfo[tagName].child.push(item);
});
let list = Object.values(dataInfo); // list 转换成功的数据
console.log(list)

Guess you like

Origin blog.csdn.net/weixin_42342065/article/details/127321074