如何修改 javascript 数组的内容 - 可能使用 forEach 函数
How to amend contents of javascript array - possibly using forEach function
我有一个函数可以将我网站的数据层中的信息推送到一个数组中。我希望能够更改该数组中的信息,但我不知道如何实现这一点。
这是我网站 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 - 用于值索引
- a - 正在应用一个数组 forEach(即 processingUrls)
因此 a[i]=...
将用新值替换当前处理的数组元素。
请注意,在大多数情况下使用 map()
仍然更可取(出于代码 style/safety 的原因)。
我建议你捕捉最后的数字模式。
试试这个:
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
}
我有一个函数可以将我网站的数据层中的信息推送到一个数组中。我希望能够更改该数组中的信息,但我不知道如何实现这一点。
这是我网站 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 - 用于值索引
- a - 正在应用一个数组 forEach(即 processingUrls)
因此 a[i]=...
将用新值替换当前处理的数组元素。
请注意,在大多数情况下使用 map()
仍然更可取(出于代码 style/safety 的原因)。
我建议你捕捉最后的数字模式。 试试这个:
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
}