簡體   English   中英

如何修改javascript數組的內容-可能使用forEach函數

[英]How to amend contents of javascript array - possibly using forEach function

我有一個將信息從我的站點的dataLayer推入數組的功能。 然后,我希望能夠更改該數組中的信息,但是我對如何實現這一點感到困惑。

這是我網站的HTML中的數據層示例:

 <script type="text/javascript"> var dataLayer = dataLayer || []; dataLayer.push({ 'transactionId': 'xxx', 'transactionAffiliation': 'xxx', 'transactionTotal': 27.95, 'transactionTax': 4.46, 'transactionGoodsNet': 18.49, 'transactionGoodsNetNoDiscount': 18.49, 'transactionGoodsTax': 3.51, 'transactionShipping': 5.95, 'transactionTotal_currency': 27.95, 'transactionTax_currency': 4.46, 'transactionGoodsNet_currency': 18.49, 'transactionGoodsNetNoDiscount_currency': 18.49, 'transactionGoodsTax_currency': 3.51, 'transactionShipping_currency': 5.95, 'transactionExchangeRate': 1.00, 'transactionProducts': [{ 'sku': 'sku1', 'name': 'name1', 'brand': 'Unbranded', 'category': 'xxxx', 'price': 6.00, 'price_ex': 5.04, 'image': 'xxx_image1.jpg', 'url': 'url1-p2180', 'quantity': 1 }, { 'sku': 'sku2', 'name': 'name2', 'brand': 'Unbranded', 'category': 'xxxx', 'price': 6.00, 'price_ex': 5.04, 'image': 'xxx_image2.jpg', 'url': 'url2-p2180', 'quantity': 1 }, { 'sku': 'sku3', 'name': 'name3', 'brand': 'Unbranded', 'category': 'xxxx', 'price': 5.00, 'price_ex': 4.20, 'image': 'xxx_image3.jpg', 'url': 'url3-p1448', 'quantity': 1 }, { 'sku': 'sku4', 'name': 'name4', 'brand': 'Unbranded', 'category': 'xxxx', 'price': 5.00, 'price_ex': 4.20, 'image': 'xxx_image4.jpg', 'url': 'url4-p1448', 'quantity': 1 }], 'transactionProductCount': 4, 'transactionDiscount': 0, 'transactionDiscountNet': 0, 'transactionDiscountTax': 0 }); </script> 

我創建了以下javascript函數,以遍歷transactionProducts數組並將所有url值推入一個名為productUrls的數組中:

 function getProductUrls() { var productUrls = [] var numberProducts = dataLayer[0].transactionProductCount for (var i = 0; i < numberProducts; i++) { productUrls.push(dataLayer[0].transactionProducts[i].url) } return productUrls } 

現在,當我調用getProductUrls()函數時,它將按預期工作,並將值按如下所示推入productUrls數組:

['url1-p2180','url2-p2180','url3-p1448', 'url4-p1448']

我要實現的是此數組(最好是)-或一個新數組(如果更容易的話)-僅包含緊跟在“ -p”之后的數字,如下所示。

['2180','2180','1448','1448']

我所有的產品網址都以“ -p”結尾,然后是任意數字。

我曾考慮過使用正則表達式替換值productUrls.replace(/.+\\-p/g, '') ,但是它不起作用,我懷疑replace僅適用於字符串,而不適用於數組。

我懷疑使用forEach函數來正則表達式替換數組中的每個項目都行得通,但是我在使用它的所有嘗試中都失敗了。

任何幫助將不勝感激,因為我有點像javascript新手。

通常,您將使用Array#map將值重新映射到新數組:

productUrls.map(v=>v.replace(/.+\-p/,''))

Array#forEach版本將如下所示:

processingUrls.forEach((v,i,a)=>a[i]=v.replace(/.+\-p/,''))

回調參數如下:

  • v-是當前值
  • i-用於價值指數
  • 一個 -的陣列的forEach被施加到(即processingUrls)

因此a[i]=...將用新值替換當前處理的數組元素。

請注意,在大多數情況下(出於代碼樣式/安全原因),仍首選使用map() )。

我建議您最后捕獲數字模式。 試試這個代替:

function getProductUrls() {
   var productUrls = []
   var numberProducts = dataLayer[0].transactionProductCount
   for (var i = 0; i < numberProducts; i++) {
     var myRegexp = /url[0-9]+\-p([0-9]+)/g;
     url  = dataLayer[0].transactionProducts[i].url;
     var match = myRegexp.exec(url);
     productUrls.push(match[1])
   }
   return productUrls
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM