簡體   English   中英

對遞歸函數進行排序會產生數組數組

[英]Ordering recursive function results in arrays of arrays

我目前正在處理一個問題,寫一個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, depth, i);
        }
    }

}

}

catalog.init();

這輸出:

在此輸入圖像描述

但是,而不是在格式下檢索我的第三張幻燈片的數據:

AAA

ABA

ACA

我想得到

AA- [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將類似於aa [a,b,c]

希望這可以幫助!!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM