首页 > 解决方案 > 如何从路径构建树

问题描述

我需要将一些路径转换为树对象。路径应代表具有以下要求的树:

  1. 对于键后的“.items.properties”,类型应该是对象数组。
  2. 对于键之后的“.items”,类型应该是一个数组。
  3. 对于键之后的“.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:[]
        }
      }
    }
}

因此,如果您有办法将我的数据结构转换为预期的,它可能会有所帮助。

标签: javascriptarraysobjectpathtree

解决方案


您可以取出零件并查找带有以下'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; }


推荐阅读