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;
}

}

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

カートの内容の配列をスキャンするループを使用してみましたが、明らかに機能していません (配列内に新しいオブジェクトを追加していません)。何かが足りないようです。

何かアイデアはありますか?

ありがとう

J

4

3 に答える 3

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,
          // ....
    });
}

そうは言っても、ここで行っているのは にコピーする (インスタンスwa_data.cart.content化しない) だけのようtc_vars.cart.contentです。したがって、私の答えを完全に忘れて、forループ全体をグルビンダーの答えに置き換えることができます(彼に+1を付けました):

tc_vars.cart.content = JSON.parse(JSON.stringify(wa_data.cart.content));
于 2016-05-03T10:28:21.693 に答える
1

wa_dataオブジェクトがすべてのインデックスで繰り返されていない限り、次のコードが機能するはずです

tc_vars.cart.content = JSON.parse(JSON.stringify(wa_data.cart.content));
于 2016-05-03T10:28:44.917 に答える
0

オブジェクト リテラルを使用できます。

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

}
于 2016-05-03T10:29:09.883 に答える