簡體   English   中英

使用JavaScript遍歷對象數組

[英]Loop through object array with javascript

我正在嘗試遍歷以下內容:

{
    "machine": [{
        "cost_center": "15023 DC1 M3 - Hassia1",
        "item": [{
            "batchno": "367721",
            "itemno": "12028"
        }, {
            "batchno": "367722",
            "itemno": "12328"
        }, {
            "batchno": "367723",
            "itemno": "12608"
        }]
    }, {
        "cost_center": "15033 DC1 M4 - Hamba",
        "item": [{
            "batchno": "367729",
            "itemno": "11850"
        }, {
            "batchno": "367730",
            "itemno": "11851"
        }, {
            "batchno": "367731",
            "itemno": "11852"
        }]
    }, {
        "cost_center": "15043 DC1 M5 - 1KG Machine",
        "item": {
            "batchno": "367732",
            "itemno": "12592"
        }
    }]
}

 var json = '{"machine":[{"cost_center":"15023 DC1 M3 - Hassia1","item":[{"batchno":"367721","itemno":"12028"},{"batchno":"367722","itemno":"12328"},{"batchno":"367723","itemno":"12608"}]},{"cost_center":"15033 DC1 M4 - Hamba","item":[{"batchno":"367729","itemno":"11850"},{"batchno":"367730","itemno":"11851"},{"batchno":"367731","itemno":"11852"}]},{"cost_center":"15043 DC1 M5 - 1KG Machine","item":{"batchno":"367732","itemno":"12592"}}]}'; var obj = JSON.parse(json); var db = obj.machine; for (var m in db) { if (db.hasOwnProperty(m)) { var item = db[m].item; console.log('cost_center ' + m + ' = ' + db[m].cost_center); for (var i in item) { if (item.hasOwnProperty(i)) { var prod = item[i]; console.log('-itemno ' + i + ' ' + prod.itemno); } } } } 

我在這里發現了類似的問題但是區別在於我的數據,我的前兩個cost_centers具有數組作為元素,而我的第三個不是數組。

cost_center 0 = 15023 DC1 M3-Hassia1
-itemno 0 12028
-itemno 1 12328
-itemno 2 12608
cost_center 1 = 15033 DC1 M4-Hamba
-itemno 0 11850
-itemno 1 11851
-itemno 2 11852
cost_center 2 = 15043 DC1 M5-1KG機器
-itemno batchno未定義
-itemno itemno未定義

我如何遍歷所有內容並仍然從不包含數組的cost_center中獲取所有值? 謝謝

您可以使用forEach屬性,而不是使用for-in遍歷數組。

另外,如果您的最后一個元素不包含數組,那么我假設它將始終是一個對象。 因此,要進行測試,您可以檢查數組的length 如果length存在,則為數組,您可以循環獲取答案。 如果不是,那么它是一個對象,因此您可以直接打印值。

 var json = '{"_vger_record_id":"2409247","ExtraData":"","machine":[{"_vger_record_id":"2409248","cost_center":"15023 DC1 M3 - Hassia1","ExtraData":"","item":[{"_vger_record_id":"2409249","batchno":"367721","itemno":"12028"},{"_vger_record_id":"2409250","batchno":"367722","itemno":"12328"},{"_vger_record_id":"2409251","batchno":"367723","itemno":"12608"}]},{"_vger_record_id":"2409257","cost_center":"15033 DC1 M4 - Hamba","ExtraData":"","item":[{"_vger_record_id":"2409258","batchno":"367729","itemno":"11850"},{"_vger_record_id":"2409259","batchno":"367730","itemno":"11851"},{"_vger_record_id":"2409260","batchno":"367731","itemno":"11852"}]},{"_vger_record_id":"2409261","cost_center":"15043 DC1 M5 - 1KG Machine","ExtraData":"","item":{"_vger_record_id":"2409262","batchno":"367732","itemno":"12592"}}]}'; var obj = JSON.parse(json); var db = obj.machine; db.forEach(function(m) { console.log('cost_center = ' + m.cost_center); if(m.item.length) { m.item.forEach(function(i) { console.log('-itemno = ' + i.itemno); }); } else { console.log('-itemno = ' + m.item.itemno); } }); 

不需要hasOwnProperty ,並且item.constructor === Array可用於檢查:

 var db = JSON.parse('{"machine":[{"cost_center":"15023 DC1 M3 - Hassia1","item":[{"batchno":"367721","itemno":"12028"},{"batchno":"367722","itemno":"12328"},{"batchno":"367723","itemno":"12608"}]},{"cost_center":"15033 DC1 M4 - Hamba","item":[{"batchno":"367729","itemno":"11850"},{"batchno":"367730","itemno":"11851"},{"batchno":"367731","itemno":"11852"}]},{"cost_center":"15043 DC1 M5 - 1KG Machine","item":{"batchno":"367732","itemno":"12592"}}]}').machine; for (var m = 0; m < db.length; m++) { var e = db[m], item = e.item; console.log('cost_center ' + m + ' = ' + e.cost_center); if (item.constructor === Array) for (var i = 0; i < item.length; i++) console.log(' itemno ' + i + ' = ' + item[i].itemno); else console.log(' itemno 0 = ' + item.itemno); } 

暫無
暫無

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

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