0

私は要素を持つ配列を持っています、

var input=[

{
    "count": 1,
    "entity": "Company",
    "Company": [
        {
            "sector": "Consumer, Cyclical",
            "ticker": "NWY",
            "entity": "New York & Co",
            "New_York_&_Co": [
                {
                    "count": 1,
                    "entity": "New York"
                }
            ],
            "type": "SCap"
        }
    ]
},
{
    "count": 1,
    "entity": "Country",
    "Country": [
        {
            "region": "North Americas",
            "index": "MEXICO IPC INDEX",
            "Mexico": [
                {
                    "count": 1,
                    "entity": "Mexico"
                }
            ],
            "entity": "Mexico",
            "currency": "Peso (MXN)"
        }
    ]
},
{
    "count": 2,
    "entity": "Persons",
    "Persons": [

        {
            "count": 1,
            "entity": "Edwin Garay"
        },

        {
            "count": 1,
            "entity": "Rosa"
        }
    ]
}]; 

このデータの出力を注文しようとしています。次のような値を表示したい

Company-New York & Co, Country-mexico, Persons-Edwin Garay,Rosa

最後のレベルに存在するデータは必要ありません...関数を書きましたが、

    function generateTree(input) {  
if (input == undefined) {
    return;
}

else {

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

        if(entityName1!=input[i].entity)
            {


            entityName = input[i].entity;
            entityName1 = input[i].entity;
            entityName = entityName.replace(/ /g, "_");
            alert(entityName);
            }

        if (input[i][entityName] != undefined) {
            generateTreeHTML(input[i][entityName]);

        }
    }
}}

上記のスクリプトは出力を出力します。

Company-New York & Co, NewYork , Country-mexico,mexico, Persons-Edwin Garay,Rosa

基本レベルのニューヨークとメキシコは必要ありません。それ、どうやったら出来るの?

4

2 に答える 2

0

あなたのデータ構造は私には過度に複雑に思えます。countフィールドは特に役に立たない。データ構造を次のように変更できませんか?

var data = {
    "companies": [{
        "name": "New York & Co",
        "sector": "Consumer, Cyclical",
        "ticker": "NWY",
        "type": "SCap"
    }],
    "countries": [{
        "name": "Mexico",
        "region": "North Americas",
        "index": "MEXICO IPC INDEX",
        "currency": "Peso (MXN)"
    }],
    "people": [
        "Gustavo",
        "Rosa"
    ]
}
于 2012-06-07T11:14:09.310 に答える
0

以下は、要求された出力を生成します。

function ​generateTree​(input) {
    var i,
        j,
        currentEntity,
        currentEntityType,
        output = "";

    for (i=0; i<input.length; i++)​ {
        if (i > 0) output += ", ";
        currentEntity = input[i];
        currentEntityType = currentEntity.entity;
        output += currentEntityType + "-";
        for (j=0; j<currentEntity[currentEntityType].length; j++){
            if (j > 0) output += ",";
            output += currentEntity[currentEntityType][j].entity;
        }
    }
    return output;
}

​alert(generateTree(input));​

デモ: http://jsfiddle.net/7PpEY/

あなたが気にしないすべてのフィールドを無視しました。あなたのデータでは、内部配列に2人しかいないにもかかわらず、「Persons」オブジェクトの「Count」が10であるという事実を無視しました。あなたの関数は再帰的でしたが、その必要はありません。

于 2012-06-07T11:43:46.440 に答える