-3

私は検索しましたが、おそらく理解していないだけで、説明を手伝ってくれる実際の人が必要です. 次の変数を生成するスクリプトがあります。

var trackerResult = {
    "sessionId": "16zA06FJt5sp",
    "customerId": "16zA06FJt5so",
    "contact": {
        "firstName": "Bilbo",
        "lastName": "Baggins",
        "email": "bbshireguy@gmail.com"
    },
    "orders": [{
        "orderId": "16zA06FJt5ss",
        "number": 11512,
        "items": [{
            "price": 97,
            "productId": "16zA06FJt3of",
            "productName": "Main"
        }]
    }, {
        "orderId": "16zA06FJt5sw",
        "number": 11513,
        "items": [{
            "price": 49,
            "productId": "16zA06FJt3op",
            "productName": "Upsell"
        }]
    }],
    "demoMode": "1"
};

商品名と価格を簡単に表示できるようにする必要があります。スクリプトが生成したものがもう少し単純であれば、私はそれを行うことができますが、私が見ているものを理解すると、技術的には子の子であるプロパティがありますか?

前もって感謝します。

4

6 に答える 6

3
trackerResult.orders.forEach( function ( order ) {
    order.items.forEach( function ( item ) {
        console.log( item.productName, item.price );
    });
});

(forEachは IE8/7 では実装されていないため、それらのブラウザー用にシムする必要があります)

于 2012-05-03T01:20:21.137 に答える
0

まず、そのオブジェクトに空白を追加して、何が起こっているかを実際に確認できるようにします。

var trackerResult = {
    "sessionId":"16zA06FJt5sp",
    "customerId":"16zA06FJt5so",
    "contact":{
        "firstName":"Bilbo",
        "lastName":"Baggins",
        "email":"bbshireguy@gmail.com"
    },
    "orders":[
        {
            "orderId":"16zA06FJt5ss",
            "number":11512,
            "items":[
                {
                    "price":97,
                    "productId":"16zA06FJt3of",
                    "productName":"Main"
                }
            ]
        },
        {
            "orderId":"16zA06FJt5sw",
            "number":11513,
            "items":[
                {
                    "price":49,
                    "productId":"16zA06FJt3op",
                    "productName":"Upsell"
                }
            ]
        }
    ],
    "demoMode":"1"
}; 

ここで、製品名と価格を取得するには、次のようにします。

var orders = trackerResult.orders,
    ordercnt = orders.length,
    items, itemcnt, i, j,
    output = "";
for( i=0; i<ordercnt; i++) {
    output += "Order #"+orders[i].number+"\n==========\n";
    items = orders[i].items;
    itemcnt = items.length;
    for( j=0; j<itemcnt; j++) output += items[j].productName+" "+items[j].price;
    output += "\n";
}
// do something with "output";
于 2012-05-03T01:21:35.290 に答える
0

まず、 の後にコロン「:」がありません"contact"

ここで、trackerResult変数内で関心のあるフィールドはorders配列です。orders配列の各メンバーには、配列がありitemsます。すべてのアイテムには、名前と価格が含まれています。

したがって、これら 2 つのフィールドを 2 つのネストされたサイクルでトラバースします。

var trackerResult = {"sessionId":"16zA06FJt5sp","customerId":"16zA06FJt5so","contact": {"firstName":"Bilbo","lastName":"Baggins","email":"bbshireguy@gmail.com"},"orders":[{"orderId":"16zA06FJt5ss","number":11512,"items":[{"price":97,"productId":"16zA06FJt3of","productName":"Main"}]},{"orderId":"16zA06FJt5sw","number":11513,"items":[{"price":49,"productId":"16zA06FJt3op","productName":"Upsell"}]}],"demoMode":"1"};

var result = '';

for (var i = 0; i < trackerResult.orders.length; i++) {
    for (var j = 0; j < trackerResult.orders[i].items.length; j++) {
        result += trackerResult.orders[i].items[j].productName + ': ' +  trackerResult.orders[i].items[j].price + '\n';
    }
}

alert(result);
于 2012-05-03T01:23:10.427 に答える
0

まず、var にエラーがあります - :afterがありません"contact"。これを修正すると、続行できます:)

次に、設定したら、注文を繰り返し処理して、すべての製品とその価格を取得する必要があります。

for ( var i = 0, l = trackerResult.orders.length; i < l; i++ ) {
    var order = trackerResult.orders[i];
    for ( var j = 0, k = order.items.length; j < k; j++ ) {
        var item = order.items[j];

        // here are the values you need to do something with
        // so do something with them now!
        var productName = item.productName;
        var price = item.price;
        console.log( productName, price );
    }
}

製品で何をしようとしているのかわかりませんが、これで製品にアクセスできるようになります!

于 2012-05-03T01:23:31.217 に答える
0

アクセスするには、使用する注文アイテムを言います:

trackerResult.orders[1].items[0].price
trackerResult.orders[1].items[0].productId
trackerResult.orders[1].items[0].productName

この情報を HTML ページに配置するには、次のようにする必要があります。

document.getElementById('price').innerHTML = trackerResult.orders[1].items[0].price;
document.getElementById('productId').innerHTML = trackerResult.orders[1].items[0].productId;
document.getElementById('productName').innerHTML = trackerResult.orders[1].items[0].productName;

ここで例を見ることができます: http://jsfiddle.net/tNmRW/1/

于 2012-05-03T01:24:49.750 に答える
0

しかし、私が見ているものを理解しているので、技術的には子供の子供であるプロパティがありますか?

うん!そこには配列であるプロパティもあります。

オブジェクトのプロパティにアクセスするには、次のコードを記述します。

alert(trackerResult.sessionId);

これは値型のプロパティです。数値は、値型のもう 1 つの例です。

子オブジェクトのプロパティにアクセスするには、同じロジックに従います。

alert(trackerResult.contact.firstName);

最初の例と大差ありません。独自のプロパティを含むタイプのプロパティにアクセスしています。これは中かっこのおかげでわかります{}

最後の例は配列型です。これらへのアクセスは少し異なります。まず、配列のサイズを決定する必要があります。これを行うには、すべての配列で使用可能な length プロパティにアクセスします。

alert("There are " + trackerResult.orders.length + " order(s)!");

配列の長さを取得したら、次のように for ループを使用してそれらを反復処理できます。

for(var x = 0; x < trackerResult.orders.length; x++)
    alert("Order number " + trackerResult.orders[x].number + " has " + trackerResult.orders[x].items.length + " items!");

そこから別のループを作成して、各注文のアイテムを反復処理できます。

于 2012-05-03T01:25:10.157 に答える