javascript - 如何把一个有很多级关系的json对象,转化成一个一层的数组展示?
ringa_lee
ringa_lee 2017-04-11 12:11:11
[JavaScript讨论组]

如题,我们有一个图书目录的数据,如图所示,结构是这样的:

有些章节只有一级目录,有些可能多级目录。
结构是如下形式

{{href:xxx,label:'第一章',subitems[{href:xxx,label:xxx,subitems:xxx},{href:xxx,label:xxx,subitems:xxx}]}}

需要转成如下的格式:

转化后=

[
{href:xxxx,chapter:['扉页']},
{href:yyyy,chapter:['第一章','第一节']},
]

就是说,把一个立体的结构给改成一个平面的,方便后面的代码使用。

请问这个该怎么做啊?头疼啊!

多谢各位

ringa_lee
ringa_lee

ringa_lee

全部回复(2)
巴扎黑

你把json内容copy出来,我看看。
我理了一下,你这个json不对:

// a 不是一个标准的json
var a = [{
    {
        href:xxx,
        label:'第一章',
        subitems: [
        {
            href:xxx,
            label:xxx,
            subitems:xxx
        },{
            href:xxx,
            label:xxx,
            subitems:xxx
        }
        ]
    }
}]
        
        
var b = [{
    href:xxxx,
    chapter:['扉页']
},{
    href:yyyy,
    chapter:['第一章','第一节']
}]
        
        
// 大概方法这样
var c = [];
// 循环读取subitems
function readJson (json, arr) {
    if (!json.subitems) {
        arr.push(json.label)
        return arr;
    } else {
        return readJson (json.subitems, arr)
    }
}
for (let i=0, len=json.length; i<len; i++) {
        var obj = {
            href: '',
            chapter: []
        };
        obj.href = json[i].href;
        for (let j=0, lenj=json[i].subitems.length; j<lenj; j++) {
            readJson (json[i].subitems[j].subitems, obj.chapter)
        }
        c.push(obj);
    }
console.log(c);    
阿神

使用递归
文字思路:循环数组,再循环数组中的对象的属性,如果这个属性是个数组,再调用本方法,否则把这个属性push到新数组中去,就OK了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号