首页 > 解决方案 > 根据值计数

问题描述

鉴于此网址

https://www.rositarococo.com/gracias.html?hwA-qty-andrea-cobre=2&hwA-qty-sol=1&hwA-qty-valen=1&hwA-qty-mo%C3%B1o-2=1&entry.1471599855=38-andrea-cobre%2C%2037-mo%C3%B1o-2%2C%2036-sol%2C%2036-valen%2C%20&entry.1460904554=sebastian%20flichtentrei&entry.53830725=1156566&entry.1465946249=sflich86%40gmail.com&entry.978809450=TARJETA%20DE%20CR%C3%89DITO&entry.951592426=lavalle%20322&entry.1743418466=ramos%20mejia&entry.59648134=bs%20as&entry.1005165410=1704&entry.541001873=32420573&entry.17650825=A%20DOMICILIO&entry.1209868979=https%3A%2F%2Fwww.rositarococo.com%2F&fvv=1&fbzx=5661184097173102736&pageHistory=0

有几个由不同名称给出的参数包含“数量”

我希望能够用“数量”计算每个参数的值

在这个例子中

hwA-qty-andrea-cobre=2
hwA-qty-sol=1
hwA-qty-valen=1
hwA-qty-mo%C3%B1o-2=1

结果将是:5

我不知道如何选择所有包含“数量”的参数值

要访问我使用的 URL 参数:

var getUrlParameter = function getUrlParameter(sParam) {
    var sPageURL = window.location.search.substring(1),
        sURLVariables = sPageURL.split('&'),
        sParameterName,
        i;

    for (i = 0; i < sURLVariables.length; i++) {
        sParameterName = sURLVariables[i].split('=');

        if (sParameterName[0] === sParam) {
            return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
        }
    }
};

但后来我不知道如何访问所有包含 qty 的参数并将所有值汇总到一个变量中,也许使用通配符?

var qtyparameter = getUrlParameter('*qty*');

标签: javascript

解决方案


使用正则表达式和.test()方法。

由于要获取所有匹配的参数,所以不能在参数匹配时立即返回,需要返回一个包含所有值的数组。


function getMatchingUrlParameters(regexp) {
  var sPageURL = window.location.search.substring(1),
    sURLVariables = sPageURL.split('&'),
    sParameterName,
    i,
    results = {};

  for (i = 0; i < sURLVariables.length; i++) {
    sParameterName = sURLVariables[i].split('=');
    if (sParameterName[0].test(regexp)) {
      results[sParameterName[0]] = decodeURIComponent(sParameterName[1]);
    }
  }
  return results;
}

然后你可以打电话

var qtyParams = getMatchingUrlParameters(/-qty-/);

结果将是:

{
  "hwA-qty-andrea-cobre": "2",
  "hwA-qty-sol": "1",
  "hwA-qty-valen": "1",
  "hwA-qty-mo%C3%B1o-2": "1"
}

然后,您可以将属性的所有值相加。


推荐阅读