转换前的数据:
let resData =
[
{ "name": "路飞", "teamName": "草帽海贼团" },
{ "name": "索隆", "teamName": "草帽海贼团"},
{ "name": "红发", "teamName": "红发海贼团"},
{ "name": "罗宾", "teamName": "草帽海贼团"},
{ "name": "不死鸟", "teamName": "白胡子海贼团",},
{ "name": "艾斯", "teamName": "白胡子海贼团", }
]
转换后的数据:
let resData = [
{
"teamName":"草帽海贼团",
"sourceList":[
{"name":"路飞","tagName":"草帽海贼团"},
{"name":"索隆","tagName":"草帽海贼团"},
{"name":"罗宾","tagName":"草帽海贼团"}
]
},
{
"teamName":"红发海贼团",
"sourceList":[
{ "name": "红发", "tagName": "红发海贼团"}
]
},
{
"teamName":"白胡子海贼团",
"sourceList":[
{
"sourceList":[
{ "name": "红发", "tagName": "白胡子海贼团"}
]
}
]
}
]
方案一:
let temp = [];
let Data = [];
for (let i = 0; i < resData.length; i++) {
if (temp.indexOf(resData[i].teamName) === -1) {
Data.push({ teamName: resData[i].teamName, dataInfo: [resData[i]] });
temp.push(resData[i].teamName);
} else {
for (let j = 0; j < Data.length; j++) {
if (Data[j].teamName == resData[i].teamName) {
Data[j].sourceList.push(resData[i]); break;
}
}
}
}
方法二:
let sourceList = {};
resData.forEach((item, index) => {
let { teamName } = item;
if (!sourceList[teamName]) {
sourceList[teamName] = { teamName, child: [] }
}
sourceList[teamName].child.push(item);
});
let list = Object.values(sourceList); // list 转换成功的数据