For循环通过一个对象来构建一个新对象

时间:2016-08-11 18:10:49

标签: javascript arrays json

问题:使用下面概述的JSON OBJECT,我需要完成(填写)代码段示例,使其看起来像第二个代码块。我不知道如何循环JSON OBJECT来构建被推入_etmc对象的内容。如果我遗漏任何可能有助于解决我的问题,请告诉我。

代码段示例:

 _etmc.push(["trackCart", { “cart”: [
    {"item" : "INSERT_ITEM", "quantity":  "INSERT_QUANTITY" , "price" : "INSERT_PRICE" ,
            "unique_id" : "INSERT_UNIQUE_ID" }
   ]}]);

以下是上述代码的最终结果:

_etmc.push(["trackCart", { “cart”: [
    {"item" : "digitalData.cart.item[0].productInfo.productName", "quantity":  "digitalData.cart.item[0].quantity" , "price" : "digitalData.cart.item[0].price" ,
            "unique_id" : "digitalData.cart.item[0].productInfo.sku" } ,
    {"item" : "digitalData.cart.item[1].productInfo.productName", "quantity":  "digitalData.cart.item[1].quantity" , "price" : "digitalData.cart.item[1].price" ,
            "unique_id" : "digitalData.cart.item[1].productInfo.sku" } 
{"item" : "digitalData.cart.item[2].productInfo.productName", "quantity":  "digitalData.cart.item[2].quantity" , "price" : "digitalData.cart.item[2].price" ,
            "unique_id" : "digitalData.cart.item[2].productInfo.sku" }
{"item" : "digitalData.cart.item[3].productInfo.productName", "quantity":  "digitalData.cart.item[3].quantity" , "price" : "digitalData.cart.item[3].price" ,
            "unique_id" : "digitalData.cart.item[3].productInfo.sku" }
{"item" : "digitalData.cart.item[4].productInfo.productName", "quantity":  "digitalData.cart.item[4].quantity" , "price" : "digitalData.cart.item[4].price" ,
            "unique_id" : "digitalData.cart.item[4].productInfo.sku" }
   ]}]);

这是我的JavaScript对象:

  var digitalData = [
"cart":{
    "item":[
        {
        “productInfo":{"productID":"p1234”,”productName":"Bamboo Towel”,”sku":"320020454"},
        "category":{"primaryCategory":""},
        "quantity":"3",
        "price":"10.0",
        "discount":[]
        },

        {
        "productInfo":{"productID":"p2345”,”productName”:”Arm Chair“,”sku":"810047424"},
        "category":{"primaryCategory":""},
        "quantity":"1",
        "price":"10.0",
        "discount":[]
        },
        {
        "productInfo":{"productID":"p3456”,”productName”:”Bathroom Rug“,”sku":"330016238"},
        "category":{"primaryCategory":""},
        "quantity":"1",
        "price":"6.0",
        "discount":[]
        },
        {
        "productInfo":{"productID":"p4567”,”productName”:”Bedroom Full Set”,”sku":"810038458"},
        "category":{"primaryCategory":""},
        "quantity":"1",
        "price":"7.0",
        "discount":[]
        },
        {
        "productInfo":{"productID":"p5678”,”productName”:”Outdoor Table”,”sku":"330016874"},
        "category":{"primaryCategory":""},
        "quantity":"1",
        "price":"39.99",
        "discount":[]
        }
           ]
    }
]

这是我尝试使用digitalData对象中的信息填充_emtc之一:

_etmc.push(["trackCart", { “cart”: [  
    for ( var i = 0; i < digitalData.cart.item.length; i++) {
        var obj = digitalData.cart.item[i];
        console.log(obj);

        for ( var key in obj) {
            {"item" : "_satellite.getVar(obj + .productInfo.productName)", "quantity":  "_satellite.getVar(obj + .quantity)" , "price" : "_satellite.getVar(obj + .price)" , "unique_id" : "_satellite.getVar(obj + .productInfo.sku)" },  

        }
        ]}]); 
    }

2 个答案:

答案 0 :(得分:0)

您可以使用Array原型的map方法迭代JSON响应中的item属性。这将为您提供一个只包含您的物品的新阵列。

var items = jsonResponse.cart.items.map(function(item) {
    return item;
})

有关MDN的参考,请参阅Array.prototype.map()

答案 1 :(得分:0)

您不能在对象或数组文字中放置for循环。循环应在其正文中执行push()

如果要将属性的值与字符串连接起来,则需要先结束字符串。

for (var i = 0; i < digitalData.cart.item.length; i++) {
    var obj = digitalData.cart.item[i];
    _etmc.trackCart.cart.push({
        item: "_satellite.getVar('" + obj.productInfo.productName + "')",
        quantity: "_satellite.getVar('" + obj.quantity + "')",
        price: "_satellite.getVar('" + obj.price + ")",
        unique_id: "_satellite.getVar('" + obj.productInfo.sku + "')"
    });
}

我不确定我是否理解你正在使用_satellite.getVar做什么,我怀疑它根本不需要,实际代码应该只是将属性的值放在结果对象中。

for (var i = 0; i < digitalData.cart.item.length; i++) {
    var obj = digitalData.cart.item[i];
    _etmc.trackCart.cart.push({
        item: obj.productInfo.productName,
        quantity: obj.quantity,
        price: obj.price,
        unique_id: obj.productInfo.sku
    });
}