javascript - 如何从路径构建树
问题描述
我需要将一些路径转换为树对象。路径应代表具有以下要求的树:
- 对于键后的“.items.properties”,类型应该是对象数组。
- 对于键之后的“.items”,类型应该是一个数组。
- 对于键之后的“.properties”,类型应该是一个对象。
例如对于这条路径:
'key1.items.properties.key2.items.properties.key3.items'
key1 是键,类型是对象数组。
这是我期望从这条路径得到的最终结果
'key1.items.properties.key2.items.properties.key3.items' // path
//expected
{
key1: [
{
key2:[
{
key3:[]
}
]
}
]
}
编辑:我知道如何使用“json-pointer”将此路径转换为该数据结构:
{
key1: {
key2:{
{
key3:[]
}
}
}
}
因此,如果您有办法将我的数据结构转换为预期的,它可能会有所帮助。
解决方案
您可以取出零件并查找带有以下'items'
字符串的键,创建一个带有空数组的新属性。
用于'properties'
创建一个新对象并将其推送到临时数组。
var string = 'key1.items.properties.key2.items.properties.key3.items',
parts = string.split('.'),
result = {},
temp = result;
for (let i = 0; i < parts.length; i++) {
if (parts[i] === 'properties') {
let object = {};
temp.push(object);
temp = object;
continue;
}
if (parts[i + 1] === 'items') {
let items = [];
temp[parts[i]] = items;
i++;
temp = items;
continue;
}
}
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- angular - 表上的两种方式数据绑定
- swift - 如何正确检查 SwiftUI 视图树?
- time-complexity - 您如何操作插入排序以始终在最坏的情况下运行
- xml - XSLT:不能在包含元素的子元素之后创建属性节点 (ana)
- ruby-on-rails - ROR 新手,控制台问题和访问具有多个 where 子句的表上的数据
- c - C中按列排序的二维数组
- java - 如何更改动态生成的 JButton 的图标
- v8 - make: *** [Makefile:223: v8js_array_access.lo] 错误 1
- amazon-web-services - Amazon ECS 说我没有选择新的 ARN 和资源 ID 格式,而我显然有
- python - Python Pylance 未解析从 __init__.py 公开的类导入