2016-05-03 22 views
0

オブジェクトを配列(電子商取引コンテキスト)に追加する際に苦労しています。オブジェクトを配列に追加する

私の "tc_vars"データレイヤーは、 "wa_data"と呼ばれる別のデータレイヤーにマップされています。後者は要求された情報を最初のものに送る。

その場合のオブジェクトは、特定の製品になり、アレイはcart.content性であろう。

var tc_vars = { 

    nav : { 
      siteCategory : wa_data.nav.siteCategory, 
      environment :wa_data.nav.environment, 
      siteType :wa_data.nav.siteType, 
      siteName :wa_data.nav.siteName, 
      pageName :wa_data.nav.pageName, 
      siteSection :wa_data.nav.siteSection, 
      country :wa_data.nav.country, 
      language :wa_data.nav.language, 
      template :wa_data.nav.template, 
      doNotTrack :window.navigator.doNotTrack, 
      customReferrer :wa_data.nav.customReferrer, 
      genomeID :wa_data.nav.genomeID, 
      mdmBID :wa_data.nav.mdmBID, 
      mdmIID :wa_data.nav.mdmIID 
     }, 

    profile : { 
      uplayID : readCookie("user_id"), 
      loginStatus : '' 
     }, 

    internalSearch : { 
      searchStatus :wa_data.internalSearch.searchStatus, 
      searchFilters :wa_data.internalSearch.searchFilters, 
      searchKeyWord :wa_data.internalSearch.searchKeyWord, 
      totalResults :wa_data.internalSearch.totalResults, 
      resultPosition :wa_data.internalSearch.resultPosition, 
      autoCompletion :wa_data.internalSearch.autoCompletion 
     }, 

    product : { 
      productID :wa_data.product.productID, 
      unitSalePrice :wa_data.product.unitSalePrice, 
      salePrice :wa_data.product.salePrice, 
      stockAvailability :wa_data.product.stockAvailability, 
      salesType :wa_data.product.salesType, 
      costOfGood :wa_data.product.costOfGood 
     },  

    cart : { 
      orderID:wa_data.cart.orderID, 
      cartOpen:wa_data.cart.cartOpen, 
      cartAdd:wa_data.cart.cartAdd, 
      cartRemove:wa_data.cart.cartRemove, 
      cartView:wa_data.cart.cartView, 
      checkout:wa_data.cart.checkout, 
      purchase:wa_data.cart.purchase, 
      currency:wa_data.cart.currency, 
      paymentMethod:wa_data.cart.paymentMethod, 
      orderShipping:wa_data.cart.orderShipping, 
      orderTotalAmountDiscounted:wa_data.cart.orderTotalAmountDiscounted, 
      orderTotalAmountNotDiscounted:wa_data.cart.orderTotalAmountNotDiscounted, 
      orderTaxAmount:wa_data.cart.orderTaxAmount, 
      orderDiscountedAmount:wa_data.cart.orderDiscountedAmount, 
      orderShippingCost:wa_data.cart.orderShippingCost, 
      billingRegion:wa_data.cart.billingRegion, 
      billingCity:wa_data.cart.billingCity, 
      orderStatus:wa_data.cart.orderStatus, 
      content : [{ 
        productID:'', 
        name:'', 
        quantity :'', 
        promoCode:'', 
        offerID:'', 
        salesType:'', 
        platform :'', 
        unitSalePrice:'', 
        salePrice:'', 
        stockAvailability:'', 
        lineItemTotalAmountDiscounted:'', 
        lineItemTotalAmountNotDiscounted:'', 
        lineItemTaxAmount:'', 
        lineItemDiscountedAmount:'', 
        lineItemShippingCost:'', 
        crossSell:'', 
        upSell:'' 
         }] 
       }, 

    tech : { 
      containerVersion : wa_data.tech.containerVersion 
    }  

}

  //Scanning for the content using a loop 
    if (typeof tc_vars.cart.content !== 'undefined' && tc_vars.nav.pageName === 'Basket'){ 
for(i=0; i < tc_vars.cart.content.length; i++) { 
    tc_vars.cart.content[i].productID = wa_data.cart.content[i].productID; 
    tc_vars.cart.content[i].name = wa_data.cart.content[i].name; 
    tc_vars.cart.content[i].quantity = wa_data.cart.content[i].quantity; 
    tc_vars.cart.content[i].promoCode = wa_data.cart.content[i].promoCode; 
    tc_vars.cart.content[i].offerID = wa_data.cart.content[i].offerID; 
    tc_vars.cart.content[i].salesType = wa_data.cart.content[i].salesType; 
    tc_vars.cart.content[i].platform = wa_data.cart.content[i].platform; 
    tc_vars.cart.content[i].unitSalePrice = wa_data.cart.content[i].unitSalePrice; 
    tc_vars.cart.content[i].salePrice = wa_data.cart.content[i].salePrice; 
    tc_vars.cart.content[i].stockAvailability = wa_data.cart.content[i].stockAvailability; 
    tc_vars.cart.content[i].lineItemTotalAmountDiscounted = wa_data.cart.content[i].lineItemTotalAmountDiscounted; 
    tc_vars.cart.content[i].lineItemTotalAmountNotDiscounted = wa_data.cart.content[i].lineItemTotalAmountNotDiscounted; 
    tc_vars.cart.content[i].lineItemTaxAmount = wa_data.cart.content[i].lineItemTaxAmount; 
    tc_vars.cart.content[i].lineItemDiscountedAmount = wa_data.cart.content[i].lineItemDiscountedAmount; 
    tc_vars.cart.content[i].lineItemShippingCost = wa_data.cart.content[i].lineItemShippingCost; 
    tc_vars.cart.content[i].crossSell = wa_data.cart.content[i].crossSell; 
    tc_vars.cart.content[i].upSell = wa_data.cart.content[i].upSell; 
} 

}

私は問題私のコードでは、カートの内容に追加された新しい製品ごとに(新しいオブジェクトのすべての専用プロパティを使用して)新しいオブジェクトを作成していません。

カートの内容の配列をスキャンするループを使用しようとしましたが、実際には動作していません(配列内に新しいオブジェクトを追加しない)。私は何かが欠けているようです。

あなたにはアイデアはありますか?

Thxをたくさん

J

+1

' tc_vars.cart.content [I] = {} ' –

+0

あなたがチェックすることができますすべてのインデックス? – gurvinder372

+0

wa_dataはすべてのインデックスで異なる製品を持っています。yes、ex:wa_data.cart.content [0] = Far Cry 3とwa_data.cart.content [1] = Far Cry Primal – Jordan

答えて

1

wa_dataない限り、次のコードは動作するはずです

tc_vars.cart.content = JSON.parse(JSON.stringify(wa_data.cart.content)); 
+0

ThxたくさんのGurvinder、あなたのソリューションは私のケースではうまくいきます:)! – Jordan

3

tc_vars.cart.content [i]は未定義です。あなたはそれを一杯にする前にまずそれを定義する必要があります。代替(軽量化構文と実行速度が速く)として

for(i=0; i < tc_vars.cart.content.length; i++) { 
    tc_vars.cart.content[i] = {}; // Creates an empty object 
    tc_vars.cart.content[i].productID = wa_data.cart.content[i].productID; // Starts filling it 
    // .... 
} 

、あなたも書くことができます:

for(i=0; i < tc_vars.cart.content.length; i++) { 
    tc_vars.cart.content[i] = { 
      productID : wa_data.cart.content[i].productID, 
      name  : wa_data.cart.content[i].name, 
      // .... 
    } 
} 
をしかし、我々は通常、そのインデックスによって配列に物事を追加しないでください。私達はちょうどそれに物事をプッシュ:

for(i=0; i < tc_vars.cart.content.length; i++) { 
    tc_vars.cart.content.push({ 
      productID : wa_data.cart.content[i].productID, 
      name  : wa_data.cart.content[i].name, 
      // .... 
    }); 
} 

これは、あなたがここでやっているすべてはtc_vars.cart.contentwa_data.cart.content(instanciatingない)コピーしているように見える、言われています。だから、完全に(+彼に+1を付けました)私の答えを忘れてGurvinderの答えとあなたの全体forループを置き換えることができます。すでにオブジェクトは、すべてのインデックスで繰り返してい

tc_vars.cart.content = JSON.parse(JSON.stringify(wa_data.cart.content)); 
+0

ThxたくさんのJeremyさんのお手伝いをしました。あなたのソリューションと明らかに、最後のものだけが正しく動作します。最初の2つは私に前と同じ結果を与えます。 3つの選択肢は私に必要なオブジェクトを与えますが、常に空のオブジェクトが1つあります。 – Jordan

0

あなたは、オブジェクトリテラルを使用することができます `wa_data`はで同じ製品を持っている場合

tc_vars.cart.content[i] = { 

    productID: wa_data.cart.content[i].productID, 
    name: wa_data.cart.content[i].name, 
    quantity: wa_data.cart.content[i].quantity, 
    promoCode: wa_data.cart.content[i].promoCode, 
    offerID: wa_data.cart.content[i].offerID, 
    salesType: wa_data.cart.content[i].salesType, 
    platform: wa_data.cart.content[i].platform, 
    unitSalePrice: wa_data.cart.content[i].unitSalePrice, 
    salePrice: wa_data.cart.content[i].salePrice, 
    stockAvailability: wa_data.cart.content[i].stockAvailability, 
    lineItemTotalAmountDiscounted: wa_data.cart.content[i].lineItemTotalAmountDiscounted, 
    lineItemTotalAmountNotDiscounted: wa_data.cart.content[i].lineItemTotalAmountNotDiscounted, 
    lineItemTaxAmount: wa_data.cart.content[i].lineItemTaxAmount, 
    lineItemDiscountedAmount: wa_data.cart.content[i].lineItemDiscountedAmount, 
    lineItemShippingCost: wa_data.cart.content[i].lineItemShippingCost, 
    crossSell: wa_data.cart.content[i].crossSell, 
    upSell: wa_data.cart.content[i].upSell 

} 
関連する問題