数组中的Javascript循环

数组中的Javascript循环,javascript,Javascript,我知道这将是一个简单的过程,我已经尝试将堆栈溢出中的不同拼图拼接在一起,但我的大脑有一部分不工作 我正在编写一个web collect JavaScript,它应该通过数据层解析我的购物车详细信息 var cartcontent = [{ "item": tealiumStaticImpressions.cart.product_sku.toString().split(".", 2)[0] + '.' + tealiumStaticImpressions.cart.product_sku.to

我知道这将是一个简单的过程,我已经尝试将堆栈溢出中的不同拼图拼接在一起,但我的大脑有一部分不工作

我正在编写一个web collect JavaScript,它应该通过数据层解析我的购物车详细信息

var cartcontent = [{
"item": tealiumStaticImpressions.cart.product_sku.toString().split(".", 2)[0] + '.' + tealiumStaticImpressions.cart.product_sku.toString().split(".", 2)[1],
"quantity": parseInt(tealiumStaticImpressions.cart.product_quantity),
"price": parseFloat(tealiumStaticImpressions.cart.cart_product_price)
}];
我需要“项目”、“数量”和“价格”来应用于所有项目-它目前只拾取第一个项目

我发现这是部分匹配

for (var key in p.cart_product_sku) {
    if (p.cart_product_sku.hasOwnProperty(key)) {
        console.log("item" + " -> " + p.cart_product_sku[key]);
    }
}
以下是预期结果

 {item: 'item_1', price: 19.9, quantity: 1},
 {item: 'item_2', price: 29.7, quantity: 3}
但我不确定这一切是如何协同工作的

编辑 这是教学统计新闻的内容

tealiumStaticImpressions.cart{
购物车产品标识:数组(2),
购物车产品价格:数组(2),
购物车产品数量:数组(2),
购物车产品sku:阵列(2),
购物车共有物品:“2”,
 …
}
购物车产品标识:阵列(2)0:“J181LS81.NVY.10”
1:“J173SS202.MUS.3”
长度:2 _协议_:Array(0)购物车u产品u价格:Array(2)
0: "81.81"
1: "72.72"
长度:2\原型:数组(0)购物车\产品\数量:数组(2)
0: "1"
1: "1"
长度:2__原型:数组(0)购物车\u产品\u sku:数组(2)
0:“J181LS81.NVY.10”
1:“J173SS202.MUS.3”
长度:2 \uuuu协议\uuuuu:数组(0)购物车\u总计\u项目:“2”
购物车总价值:“169.98”
签出步骤:“1”
电子商务行动:“结帐”
页面类型:“购物车”

产品类别:(2)[“长袖衬衫”、“短袖衬衫”]产品名称:(2)[“多诺万格子衬衫”、“亨利亚麻格子衬衫”]产品价格:(2)[“89.99”、“79.99”]产品数量:(2)[“1”、“1”]产品尺寸:(2)[“LT”、“4XL”]产品库存单位:(2)[“J181LS81.NVY.10”、“J173SS202.MUS.3”]产品子类别:(2)[“衬衫”、“衬衫”]_uuuproto_uuu:Object
是的,我认为这和你想象的一样简单。我们的基本假设是

  • cart
    中的any iterable属性(一个可以迭代的属性,如数组)对应于其他iterable属性的索引。也就是说,
    cart\u product\u id[0]
    对应于
    cart\u product\u price[0]
    cart\u product\u quantity[0]
    ,等等

  • 我们新集合的属性名称可以来自
    cart
    道具本身的名称。因此,采用以下道具:
    cart\u product\u id
    cart\u product\u price
    cart\u product\u quantity
    ,等等,我们的对象看起来像:

    {
      id: 0,
      price: "$0.10",
      quantity: 10
      ... 
    } 
    
  • 这些假设将允许我们创建一个循环,该循环首先遍历我们期望的产品总量,然后在
    购物车中重新设置属性。第二个循环将为新的项目集合提供数据,每次一个项目

    const cart = tealiumStaticImpressions.cart;
    const totalItems = parseInt(cart.cart_total_items);
    // Some of the properties in `cart` don't provide item information. We'll exclude them
    const exclude = ['cart_total_items']; 
    
    let collection = [];
    
    for (let i =0; i < totalItems; i++) {
      let currentItem = {};
    
      Object.keys(cart).forEach(key => {  // Loop through only own properties in cart
        if (exclude.some(ex => ex === key)) return; // Don't process keys in cart that are in the exclude list
    
        let prop = key.split("_").pop(); // Get the word after the last "_"
    
        currentItem[prop] = cart[key][i]; // Map the value of this property to our new collection item
      });
    
      // We populated our current item, now push into the collection
      collection.push(currentItem); 
    }
    
    const cart=tealiumStaticImpressions.cart;
    const totalItems=parseInt(cart.cart\u total\u items);
    //“购物车”中的某些属性不提供商品信息。我们将排除他们
    const exclude=['cart_total_items'];
    让集合=[];
    for(设i=0;i{//只循环遍历cart中自己的属性
    if(exclude.some(ex=>ex==key))return;//不处理购物车中排除列表中的密钥
    让prop=key.split(“\u”).pop();//获取最后一个“\u”后面的单词
    currentItem[prop]=cart[key][i];//将此属性的值映射到我们的新集合项
    });
    //我们填充了当前项目,现在将其推入集合
    collection.push(当前项);
    }
    
    为什么不将TealiumStaticPressions的内容转储到DevTools中,然后发布到这里呢。了解结构是回答问题的必要条件。此外,考虑共享这些数据来自何处,并使用额外的标签来吸引与您正在使用的平台一起工作的用户。抱歉。那当然是个好主意。