我有一个具有以下格式的数组
let array = [{id: 1, desc: 'd1', children:[{id:1.1, desc:'d1.1', children:[]}]},
{id:2, desc:'d2', children:[] },
{id:3, desc:'d3', children:[] }];
其中每个子元素与父元素具有相同的时间。我希望它将其转换为格式为 { [id]: {values} }
:
{
1: { id: 1, desc: 'd1', children: {1.1: {id:1.1, desc:'d1.1'}},
2: { id:2, desc:'d2' },
3: { id:3, desc:'d3' }
}
我尝试了很多方法,但都没有成功。例如:
let obj = array.map(a => mapArrayToObj(a));
mapArrayToObj = (e) => {
let obj = {[e.id]: e };
if(e.children.lenght > 0){
e.children = e.children.map(c => mapArrayToObj(c));
}
else{
return {[e.id]: e };
}
}
这在 Javascript 中是否可行?
最佳答案
您可以使用递归函数从给定的项目中生成对象,而无需改变原始数据。
function getObjects(array) {
var object = {};
array.forEach(function (item) {
object[item.id] = Object.assign({}, item, { children: getObjects(item.children) });
});
return object;
}
var array = [{ id: 1, desc: 'd1', children: [{ id: 1.1, desc: 'd1.1', children: [] }] }, { id: 2, desc: 'd2', children: [] }, { id: 3, desc: 'd3', children: [] }];
console.log(getObjects(array));
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 在Javascript中将具有树结构的数组转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49303432/