[英]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/,''))
回調參數如下:
因此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.