2

私の質問は、JQueryを使用して区切り文字列を階層JSONに変換することに関するものです

区切られた文字列からjsonオブジェクトを作成する必要がある同様のタスクがあります。

var input = ["Fred-Jim-Bob", "Fred-Jim", "Fred-Thomas-Rob", "Fred"];

どの出力

[{
"name": "Fred",
"children": [{
    "name": "Jim",
    "children": [{
        "name": "Bob",
        "children": []
    }]
}, {
    "name": "Thomas",
    "children": [{
        "name": "Rob",
        "children": []
    }]
}]
}]

これ以上子を持たない各ノードには、次のように「last」と呼ばれる追加のサブノードが必要であるという違いがあります。

{
    "name": "Thomas",
    "children": [{
        "name": "Rob",
        "children": [],
        "last":true

}

このアルゴリズムを使用して、ノードに子がもうないかどうかを検出し、そこにノードを追加できますか?

var input = ["Fred-Jim-Bob", "Fred-Jim", "Fred-Thomas-Rob", "Fred"];
var output = [];
for (var i = 0; i < input.length; i++) {
var chain = input[i].split("-");
var currentNode = output;
for (var j = 0; j < chain.length; j++) {
    var wantedNode = chain[j];
    var lastNode = currentNode;
    for (var k = 0; k < currentNode.length; k++) {
        if (currentNode[k].name == wantedNode) {
            currentNode = currentNode[k].children;
            break;
        }
    }
    // If we couldn't find an item in this list of children
    // that has the right name, create one:
    if (lastNode == currentNode) {
        var newNode = currentNode[k] = {name: wantedNode, children: []};
        currentNode = newNode.children;
    }
}
}

前もって感謝します。

4

1 に答える 1

2

入力リストを並べ替えた場合、次のように子がもうないことを特定できます。

  1. 「NodeA-NodeB-NodeC」にいるとしましょう。
  2. リストの右に移動すると、アルファベットの後ろに移動する必要があるため、移動先のリスト項目の一部として「NodeA-NodeB」がなかった場合、NodeB にはそれ以上の子はありません。 .
于 2012-01-12T06:35:44.893 に答える