我想要把一个json数组进行相同值合并分类,自己用循环蒙圈了,通过js或者php操作,该怎么办??
[
{"id":"1000", "name": "监控", "city": "成都", "value": 9},
{"id":"1001", "name": "手机", "city": "上海", "value": [1,2]},
{"id":"1002", "name": "电脑", "city": "重庆", "value": 2},
{"id":"1002", "name": "电脑", "city": "北京", "value": [3,4,8]},
{"id":"1002", "name": "平板", "city": "杭州", "value": 8}
]
[
{"id": "1000","tree": [
{"name": "监控","data": [
{"city": "成都","value": 9}
]
}
]
},
{"id": "1001","tree": [
{"name": "手机","data":[
{"city": "上海","value": [1,2]}
]
}
]
},
{"id": "1002",
"tree": [
{"name": "电脑",
"data": [
{"city": "重庆","value": 2},
{"city": "北京","value": [3,4,8]}
]
},
{"name": "平板",
"data": [
{"city": "天津","value": 8}
]
}
]
}
]
const arr = [
{ id: "1000", name: "监控", city: "成都", value: 9 },
{ id: "1001", name: "手机", city: "上海", value: [1, 2] },
{ id: "1002", name: "电脑", city: "重庆", value: 2 },
{ id: "1002", name: "电脑", city: "北京", value: [3, 4, 8] },
{ id: "1002", name: "平板", city: "杭州", value: 8 },
];
let treeArr = [];
arr.forEach((t) => {
if (treeArr.length === 0) {
treeArr.push({
id: t.id,
tree: [
{
name: t.name,
data: [{ city: t.city, value: t.value }],
},
],
});
} else {
const exist = treeArr.find((x) => x.id === t.id);
if (!exist) {
treeArr.push({
id: t.id,
tree: [
{
name: t.name,
data: [{ city: t.city, value: t.value }],
},
],
});
} else {
exist.tree.push({
name: t.name,
data: [{ city: t.city, value: t.value }],
});
}
}
});
console.log("treeArr", treeArr);