javascript – 订购递归函数会导致数组数组

我目前正在处理一个问题,写一个recrusive函数来订购一些json数据.我有几个嵌套的对象数组,我需要订购单个幻灯片.结构类似于以下内容
[
{
    "title": "a","children": [
        {
            "title": "a-a","children": [
                {
                    "title": "a-a-a"
                },{
                    "title": "a-a-b"
                }
            ]
        },{
            "title": "a-b","children": [
                {
                    "title": "a-b-a"
                },{
                    "title": "a-b-b"
                }
            ]
        }
    ]
},{
    "title": "b","children": [
        {
            "title": "b-a","children": [
                {
                    "title": "b-a-a"
                },{
                    "title": "b-a-b"
                }
            ]
        },{
            "title": "b-b","children": [
                {
                    "title": "b-b-a"
                },{
                    "title": "b-b-b"
                }
            ]
        }
    ]
}
]

我写了一个递归函数

var catalog = {

init: function() {

    var _this = this;

    $.getJSON("catalog.json",function(data) {

        _this.slides = [];
        _this.parseCategories(data.catalog.category,-1,0);

    });

},parseCategories: function(array,depth,prevParent) {
    ++depth;

    if (!this.slides[depth]) this.slides[depth] = [];
    if (!this.slides[depth][prevParent]) this.slides[depth][prevParent] = [];

    this.slides[depth][prevParent].push(array);

    for (var i = 0; i < array.length; i++) {

        if (array[i].category) {

            this.parseCategories(array[i].category,i);
        }
    }

}

}

catalog.init();

输出

但是,而不是在格式下检索我的第三张幻灯片的数据:

A-A-A

A-B-A

A-C-一个

我想得到

一个-α-[A,B,C]

我想知道这是否可能,因为我不擅长处理递归过程.我希望我很清楚,谢谢你阅读本文.
我基本上需要保留原始数据结构,但删除每次迭代的第一个深度级别(滑块中的滑动表示我的数据结构中的深度增加).

解决方法

我最近编写了一个算法来递归处理这样的数据.这是一个 jsfiddle和主要功能
console.log('starting');
// data in tree format.
var output = {};
// data in slide format ["a-a-a","a-a-b","b-b-a","b-b-b"]
var outputStrs = [];
parseData(data,output);
console.log(output);
console.log(outputStrs);

function parseData(data,store) {
    // go through each element 
    for (var i = 0; i < data.length; i++) {
        var element = data[i];
        // used to keep track of where we are in the tree.
        var splitElement = element.title.split('-'); 
        var titleStart = splitElement[0];
        // console.log(element);
        if (_.has(element,'children') && _.isArray(element.children)) {
            // if there is a children,then recursively handle it. 
            store[titleStart] = {};
            parseData(element.children,store[titleStart]);
        } else {
            // if we are at the end,then add in the data differently. 
            var titleEnd = splitElement[splitElement.length-1];
            store[titleEnd] = titleEnd;
            // create the slides 
            var slide = [];
            for (var j = 0; j < splitElement.length; j++) {
                if (j !== splitElement.length - 1) {
                    slide.push(titleStart); 
                } else {
                    slide.push(titleEnd); 
                }
            }
            slide = slide.join('-');
            if (!_.contains(outputStrs,slide)) outputStrs.push(slide);
        }
    }
}

使用此数据,输出应该类似

a
    a
        a
        b
b
    b
        a
        b

而outputStrs将类似于a-a- [a,b,c]

希望这可以帮助!!!

相关文章

事件冒泡和事件捕获 起因:今天在封装一个bind函数的时候,发现el.addEventListener函数支持第三个参数...
js小数运算会出现精度问题 js number类型 JS 数字类型只有number类型,number类型相当于其他强类型语言...
什么是跨域 跨域 : 广义的跨域包含一下内容 : 1.资源跳转(链接跳转,重定向跳转,表单提交) 2.资源...
@ &quot;TOC&quot; 常见对base64的认知(不完全正确) 首先对base64常见的认知,也是须知的必须有...
搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : 的缩写,说都能直接说出来 :模型, :视图, :视图模...
首先我们需要一个html代码的框架如下: 我们的目的是实现ul中的内容进行横向的一点一点滚动。ul中的内容...