J'ai une fonction qui pousse les informations de dataLayer de mon site dans un tableau. Je veux être en mesure de changer ensuite l'information dans ce tableau, mais je ne sais pas comment y parvenir.Comment modifier le contenu d'une matrice javascript - éventuellement en utilisant la fonction forEach
Voici un exemple de la couche de données de HTML de mon site:
<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>
J'ai créé ce qui suit la fonction javascript à boucle à travers le réseau transactionProducts
et pousser tous les url
valeurs dans un tableau appelé 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
}
Maintenant, quand je l'appelle la fonction getProductUrls()
, il fonctionne comme prévu et pousse les valeurs dans le tableau productUrls
comme suit:
['url1-p2180','url2-p2180','url3-p1448', 'url4-p1448']
Ce que je veux acheive est ce tableau (de préférence) - ou un nouveau tableau (si plus facile) - ne contenant que les nombres qui suivent immédiatement le "-p" comme suit.
['2180','2180','1448','1448']
Tous mes urls produits se terminent par « -p » et un certain nombre de chiffres.
J'ai pensé à l'aide d'une expression régulière pour remplacer les valeurs productUrls.replace(/.+\-p/g, '')
, mais cela ne fonctionne pas et je pense que replace
fonctionne uniquement avec des chaînes et non des tableaux. Je suppose que l'utilisation d'une fonction forEach
pour regex remplacer chaque élément dans le tableau fonctionnerait, mais je échoue misérablement dans toutes les tentatives d'utiliser cela.
Toute aide serait grandement appréciée, car je suis un peu novice javascript.
Merci. Cela a fonctionné un régal. J'ai mappé 'productUrls' à un nouveau tableau comme vous l'avez dit' var arr = productUrls.map (v => v.replace (/.+\- p /, '')) 'et je suis maintenant capable de retourner cette nouvelle tableau à la fin de ma fonction. – mickymac0