【问题标题】:How to build tree from path如何从路径构建树
【发布时间】:2020-10-10 19:03:19
【问题描述】:

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

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

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

【问题讨论】:

  • 它是一个新的数据结构,还是你有一个给定的结构,你想在其中包含新结构?顺便说一句,你试过什么?
  • 我在我的问题中添加了我拥有的数据结构。如果您有办法将我的数据结构转换为预期的,它会有所帮助。

标签: javascript arrays object path tree


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    相关资源
    最近更新 更多