首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将对象列表转换为json树结构

将对象列表转换为json树结构
EN

Stack Overflow用户
提问于 2014-01-20 09:26:41
回答 1查看 2K关注 0票数 1

我有一个列表,需要转换成json格式。

这个..。

代码语言:javascript
运行
复制
var sourceList = [
    { title: "item-1", indent: "0" },
    { title: "item-2", indent: "0" },
    { title: "item-3", indent: "0", folder: true },
    { title: "item-4", indent: "1" },
    { title: "item-5", indent: "1", folder: true },
    { title: "item-6", indent: "2" },
    { title: "item-7", indent: "2" },
    { title: "item-8", indent: "0" }
];

为了这个..。

代码语言:javascript
运行
复制
var targetJson = [
    { title: "item-1" },
    { title: "item-2" },
    { title: "item-3", folder: true, children: [
        { title: "item-4" },
        { title: "item-5", folder: true, children: [
            { title: "item-6" },
            { title: "item-7" }
        ]},
    ]},
    { title: "item-8" }
];

这样,结果就可以用于插入如下所示的树结构。

代码语言:javascript
运行
复制
    item-1
    item-2
    item-3
    .. item-4
    .. item-5
    .... item-6
    .... item-7
    item-8

每个源对象的“缩进”属性确定其相对于前一个对象的位置。

就像如果一个对象的缩进大于前一个,那么它将被视为先前的子对象,如果它的缩进与前面的缩进相同,那么它将被视为前一个的同级。因此,具有子项的节点将出现子属性和文件夹属性。

其中一项挑战是“第8项”,即与前一项第2级相比,该项目处于0级。

需要一个解决方案,最好是在javascript。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-20 09:44:23

我在缩进和要添加子元素之间保持了一个映射:

代码语言:javascript
运行
复制
// test data
var sourceList = [
    { title: "item-1", indent: "0" },
    { title: "item-2", indent: "0" },
    { title: "item-3", indent: "0", folder: true },
    { title: "item-4", indent: "1" },
    { title: "item-5", indent: "1", folder: true },
    { title: "item-6", indent: "2" },
    { title: "item-7", indent: "2" },
    { title: "item-8", indent: "0" }
];

// init
var targetJson = [];
var roots = { 0 : targetJson};

// actual code:
sourceList.forEach(function(item){
  if (!roots[item.indent].splice) {
    roots[item.indent] = roots[item.indent].children = [];
  }
  roots[item.indent].push(item);
  if (item.folder) {
    roots[+item.indent+1] = item;
  }
});

// output
console.log(targetJson);

PS:我在对象中保留了缩进属性,这样您就可以检查结果。添加项目后,请随意删除它。这是无关紧要的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21230283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档