我想以层次结构格式进行数据处理。目前,我通过join从数据库中获取数据,数据格式如下。
[{id:1, name:'India', parentId : ''},
{id:2, name:'Gujarat', parentId : '1'},
{id:3, name:'Ahmedabad', parentId : '2'},
{id:4, name:'Maharastra', parentId : '1'}]
我想要以下格式来绑定treeview和angularjs。
[
{
id: 1,
name: 'India',
child: [
{
id: 2,
name: 'Gujarat',
child: [
{
id: 3,
name: 'Ahmedabad',
child: [
]
}
]
},
{
id: 4,
name: 'Maharastra',
child: [
]
}
]
}
]
答案 0 :(得分:1)
您可以使用array.reduce
但是由于您要向其他对象添加对象,因此需要确保已添加父对象,因此您需要先sort
let places = [{id:1, name:'India', parentId : ''},
{id:2, name:'Gujarat', parentId : '1'},
{id:3, name:'Ahmedabad', parentId : '2'},
{id:4, name:'Maharastra', parentId : '1'}]
// sort to ensure you take care of parents befose children
places = places.sort((i, j) => i.parentId - j.parentId)
let result = []
// you reduce the array
// the accumulator is used to keep easy access to object already processed
places.reduce((acc, place) => {
// create the new object
let plc = {id: place.id, name: place.name, childs: []}
// if there is a parent
if (place.parentId) {
// add the current object to the parent
acc[place.parentId].childs.push(plc)
} else {
// or add the current object to the root
result.push(plc)
}
// easy acces to this object
acc[place.id] = plc
return acc
}, [])
console.log(result)