格式化嵌套菜单目录树,将具有父id的对象数组转换为对象嵌套结构,支持无限层级

//嵌套目录层级
//将具有父id的对象数组转换为对象嵌套结构
//参考:https://stackoverflow.com/questions/18017869/build-tree-array-from-flat-array-in-javascript
//list为待转换的对象数组,key为表示父id的键名
function doListToTree(list,key='father_id') {
    let map = {}, outData = [];
    list.map((item,index)=>{
        map[list[index].id] = index; // 初始化map
        list[index].children = []; // 初始化children
    })
    list.map((item)=>{
        if (item[key] !== 0) {
            // 检查 map[item[key]] 是否存在,以判断悬垂的分支(父id不存在的分支)
            // 出现此问题一般是由于父id已删除,但是没有删除掉其子id
            if(map[item[key]]===undefined){
                console.log('悬垂的分支 -> ',item);
                //TODO: 向错误监控平台报告错误
            }else{
                list[map[item[key]]].children.push(item);
            }
        } else {
            outData.push(item);
        }
    })
    return outData;
}

输入:

let menu = [
	{"id":12,"parentId":0},
	{"id":6,"parentId":12},
	{"id":7,"parentId":12},
	{"id":8,"parentId":7},
	{"id":18,"parentId":8},
	{"id":28,"parentId":18},
	{"id":9,"parentId":0},
	{"id":11,"parentId":9},
	{"id":15,"parentId":88}
];
console.log(doListToTree(menu,'parentId'));

输出:

[{
	"id": 12,
	"parentId": 0,
	"children": [{
		"id": 6,
		"parentId": 12,
		"children": []
	}, {
		"id": 7,
		"parentId": 12,
		"children": [{
			"id": 8,
			"parentId": 7,
			"children": [{
				"id": 18,
				"parentId": 8,
				"children": [{
					"id": 28,
					"parentId": 18,
					"children": []
				}]
			}]
		}]
	}]
}, {
	"id": 9,
	"parentId": 0,
	"children": [{
		"id": 11,
		"parentId": 9,
		"children": []
	}]
}]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果要把嵌套的 JSON 数据转换为整齐的格式,可以使用 JSON 格式化工具。许多文本编辑器都支持对 JSON 文件的格式化,也可以使用在线的 JSON 格式化工具。如果要使用代码实现,可以使用 Python 的内置库 json 对 JSON 数据进行处理,并使用 json.dumps 函数将其转换为整齐的格式。 ### 回答2: 要将嵌套的JSON数据改为整齐的格式,可以采用以下的步骤: 1. 首先,确定你想要的整齐格式的样式。这包括缩进、换行等方面的规则。例如,常见的整齐格式是每个键值对都在新的一行上,并使用缩进来表示层级关系。 2. 接下来,使用递归算法遍历整个JSON数据。递归遍历可以处理任意层级嵌套结构。对于每个键值对,根据所确定的格式样式进行适当的处理。 3. 在生成整齐格式的输出时,可以使用字符串拼接的方式来构建结果。在每个键值对之前添加适当数量的缩进,并在键和值之间添加冒号。可以根据每个键值对的层级关系来确定缩进的数量。 4. 对于嵌套对象或数组,可以递归调用步骤2中的处理方式,以处理它们内部的键值对。 5. 最后,将递归处理得到的字符串输出即可得到整齐的格式。可以将结果打印到控制台,也可以存储到文件中。 通过以上步骤,你可以将嵌套的JSON数据转换成整齐的格式。这将使JSON更易于阅读和理解,方便进行后续的处理和解析操作。 ### 回答3: 要将嵌套的JSON数据改为整齐的格式,可以按照以下步骤进行操作: 1. 首先,确保你已经得到了嵌套的JSON数据。 2. 要将它改为整齐的格式,可以使用JSON的解析库或者在线工具来格式化数据。例如,可以使用Python中的json库来解析和格式化JSON数据。 3. 如果你使用的是Python解析库,可以使用json.dumps()函数来将JSON数据转化为字符串,并使用indent参数设置缩进的空格数,使其更整齐。 4. 设置indent参数为一个正整数,表示每一级嵌套的缩进空格数。例如,设置indent=4,将会以4个空格作为缩进。 5. 运行代码,将会看到原始的嵌套JSON数据已经以整齐的格式输出。 6. 如果你使用的是在线工具,打开一个JSON格式化的网站,将原始的嵌套JSON数据粘贴到文本框中。 7. 在工具中选择合适的选项,例如,选择合适的缩进空格数,然后点击格式化按钮或者类似的选项。 8. 工具将会将嵌套的JSON数据格式化并显示在界面上。 9. 你可以复制格式化后的数据,并用于其他用途。 通过以上步骤,你可以将嵌套的JSON数据改为整齐的格式,使其更易于阅读和理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值