javascript - 在Javascript中将具有树结构的数组转换为对象

标签 javascript arrays json mapping key-value

我有一个具有以下格式的数组

 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/

相关文章:

javascript - Promise 出现 "Variable declaration expected."错误

java - 由方法生成的数组

Python:如何在由数组和 NaN 组成的数据帧(panda)中建立索引

javascript - 如何分别制作DBconnection和Node.js查询文件

json - 如何将数据从 CosmosDB 中的文档传输到 Azure SQL 数据库?

javascript - Json parse() 在 javascript 中不会转义\"

javascript - 如何在对象数组上使用 Promise.all,然后将它们重新分配给新对象中的相关键?

javascript - 在倒计时/计时器中将时间格式化为分钟和秒

javascript - jQuery - 使用实时而不是绑定(bind)?

JAVA - 初始化数组的单个元素时出现问题