2016-08-11 216 views
-2

问题:使用下面概述的JSON对象,我需要完成(填充)代码片段示例,以便它看起来像第二个代码块。我不知道如何通过JSON对象循环来构建被推入_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)" }, 

     } 
     ]}]); 
    } 
+0

你想从'items'中得到什么?发布当前数据格式(你所做的)和最终形式看起来像什么样的例子会很有帮助 –

+0

你不能在数组中使用'for'语句...... –

+0

@RobM。我不知道还有什么我可以告诉你的最上面的片段是我想创建的第二个是我的json对象,第三个是我试图用json对象的数据填充第一个空格使用路径,所以( obj + .productInfo.productName)将是digitalData.cart.item [0] .productInfo.productName如果我错过了其他事情,请让我知道。 – Denoteone

回答

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 
    }); 
} 
+0

谢谢你的例子,我觉得我认为所有被“推”到_etmc中的元素都必须立即发生,并且不能一次推入一个,因为for循环是围绕推和不在里面。 – Denoteone

0

你可以使用Array原型的地图方法,通过在你的JSON响应项目属性进行迭代。这会给你一个只有你的物品的新阵列。

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

请参阅Array.prototype.map()以供MDN参考。

相关问题