將數組里某個屬性相同的對象合並成一個數組
原數組如下
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" } ]
需求是,轉成如下數組
也就是將具有相同“tagName”的對象合並成新數組
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" } ] } ]
以下是解決方案
方案一:
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);
方案二:
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)
以上方法綜合借鑒了其他博主的文章,總結以供大家一起學習!
轉自於:https://blog.csdn.net/shiningyn/article/details/105409636