【问题标题】:how to fill by code nested tree structure into obj?如何通过代码嵌套树结构填充到obj中?
【发布时间】:2023-03-03 05:54:22
【问题描述】:

我想创建一个树状嵌套结构作为 obj(后来的 JSON),但很难正确地做到这一点。

我想转换这个:

root/app/index.html

进入这个:

{
  type: 'box',
  name: 'root'
  children: {
    type: 'box',
    name: 'app',
    children: {
      type: 'item',
      name: 'index.html'
    }
  }
}

我如何通过代码做到这一点有什么建议?

【问题讨论】:

  • 你试过了吗?一个好的起点是拆分路径,然后您可以将结果数组减少为一个对象。看看splitreduce 函数。
  • 是的,尽量不要让我的问题超载所以不要放这么简单的东西,我的问题开始了,然后我尝试做 push() :(

标签: javascript arrays json object tree


【解决方案1】:

您也可以使用递归方法:

let str = 'root/app/index.html';
console.log(convertToNestedTree(str))

function convertToNestedTree(str) {
    let members = str.split('/');

    if(members.length === 1) {
        return ({type:'item', name:str});
    }

    return ({type:'box', name:members[0], 
            children:convertToNestedTree(members.slice(1).join('/'))
           });
}

【讨论】:

  • 太棒了,通过 push 尝试并进入 trobles 然后它用最后一个更新所有名称,但这一个非常完美。
【解决方案2】:

您可以创建一个函数,将字符串和split 放入数组中,然后您可以在该数组上使用reduce 方法来构建嵌套结构。

const string = 'root/app/index.html';

const parse = str => {
  const result = {}

  str.split('/').reduce((r, name, i, a) => {
    Object.assign(r, {name, type: a[i + 1] ? 'box' : 'item'})
    return a[i + 1] ? (r.children = {}) : r
  }, result)

  return result;
}

console.log(parse(string))

【讨论】:

  • 谢谢,但我的嵌入 javascript 不支持分配 :( 但我知道了
猜你喜欢
  • 2014-10-12
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
相关资源
最近更新 更多