代码之家  ›  专栏  ›  技术社区  ›  mickymac0

如何修改javascript数组的内容-可能使用forEach函数

  •  0
  • mickymac0  · 技术社区  · 8 年前

    我有一个功能,可以将信息从站点的数据层推送到一个数组中。我希望能够更改该数组中的信息,但我不知道如何实现这一点。

    以下是我的网站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>

    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() 函数,它按预期工作,并将值推送到 数组如下:

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

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

    我所有的产品URL都以“-p”结尾,然后是任意数字。

    我考虑过用正则表达式替换这些值 productUrls.replace(/.+\-p/g, '') ,但它不起作用,我怀疑 replace

    forEach

    任何帮助都将不胜感激,因为我是一个javascript新手。

    2 回复  |  直到 8 年前
        1
  •  0
  •   zeppelin    8 年前

    您通常会使用 Array#map

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

    Array#forEach 版本如下:

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

    回调参数如下:

    • 一、 -用于值索引
    • -数组forEach正在应用于(即。 处理URL

    因此 a[i]=... 将用新值替换当前处理的数组元素。

    注意,使用 map() 在大多数情况下仍然更可取(出于代码风格/安全原因)。

        2
  •  0
  •   qannouf oualid    8 年前

    我建议你在最后捕捉数字的模式。

    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
    }