0

次の配列があります

array = [
{
    "id": "67",
    "sub": [
        {
            "id": "663",
        },
        {
            "id": "435",
        }
    ]
},
{
    "id": "546",
    "sub": [
        {
            "id": "23",
            "sub": [
             {
                 "id": "4",
             }
         ]
        },
        {
            "id": "71"
        }
    ]
}
]

現在、次のように配列をループしています

配列の呼び出し:

processArray(array);

関数ループ

function processArray(arr)
{
    for(var item in arr) {
        var value = arr[item];      
        var order = item;
        var itemID = value.id;

        if(itemID != null)
        {
            $('.text').append(" ORDER : " + order + " Item ID : " + itemID  + "<br />" );
        }
        if(typeof(value) == 'object') { //If it is an array,            
            processArray(arr[item]);
        }
    }   
}

現在、アイテムの注文と現在の ID は問題ありません。ただし、(私のデータベース スキーマに) 必要なのは、各アイテムが親の ID を取得することです。各ノードに親を渡す必要がありますか? それとももっと簡単な方法がありますか?

ありがとう

4

2 に答える 2

2

ワーキングデモ

parentID関数にオプションのパラメーターを含めます。これにより、構文を使用しprocessArray(array);て元の配列を処理できます。

function processArray(arr, parentID)
{
    for(var item in arr) {
        var value = arr[item];      
        var order = item;
        var itemID = value.id;

        if(itemID != null)
        {
            var output = " ORDER : " + order + " Item ID : " + itemID;

            if( parentID ) { output += " PARENT : " + parentID; }

            $('.text').append( output + "<br />");
        }

        // PROCESS SUB-ARRAY
        if( typeof(value.sub) == 'object') { //If it is an array,            
            processArray( value.sub, itemID );
        }
    }   
}
于 2012-08-27T16:25:20.337 に答える
1

id署名の一部として以下を含む補助関数を使用します。

function processArray(arr) {

    function _processArray(arr, id) {
        for (var item in arr) {

            var value = arr[item];
            var order = item;
            var itemID = value.id; // you need to change this because on the second call you pass in a string and not just an object
            var parentId = id;

            // Commenting the if statement that you had here actually shows the parent id's now.
            $('.text').append(" ORDER : " + order + " Item ID : " + itemID + " Parent Id : " + parentId + "<br />");


            if (typeof value === "object") { //use instanceof,            
                _processArray(arr[item], itemID);
            }
        }
    }

    _processArray(arr, 0);
}
于 2012-08-27T16:21:10.613 に答える