【问题标题】:Retrieve multiple key/values from query string with same parameter从具有相同参数的查询字符串中检索多个键/值
【发布时间】:2020-10-12 13:58:42
【问题描述】:

我正在尝试从查询字符串中提取多个参数,其中参数具有相同的名称,在我的例子中为 filter。我似乎只能使用以下方法访问过滤器的第一个实例,并且我还需要将键/值从冒号分隔符拆分为更易于使用的格式,我不确定如何最好地处理.如果有人能指出我正确的方向,不胜感激。

myURL =  example.com?someparam=test&filter=color:"GOLD"&filter=size:"10";

var getUrlParameter = function getUrlParameter(sParam) {
    var sPageURL = urlParams,
    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]);
   }
   }
  };

var filters = getUrlParameter('filter');

console.log(filter);
// Outputs...
color:"GOLD"

【问题讨论】:

标签: javascript


【解决方案1】:
let parts = myURL.split("&");
let filters = {};
parts.forEach(part => {
  if (part.includes("filter")) {
    let value = part.split("=")[1];
    let key = value.split(":")[0];
    filters[key] = value.split(":")[1];
   }
})

输出:

{
  color: "'GOLD'",
  size: "'10'"
}

【讨论】:

    【解决方案2】:

    无需重新发明轮子

    已经有一个很好的库:query-string

    const query = require('query-string')
    
    const url = 'someparam=test&filter=color:"GOLD"&filter=size:"10"';
    
    const result = query.parse(url);
    console.log(JSON.stringify(result));
    

    output

    {"filter":["color:\"GOLD\"","size:\"10\""],"someparam":"test"}
    

    【讨论】:

      【解决方案3】:
          myURL =  `example.com?someparam=test&filter=color:"GOLD"&filter=size:"10"`;
      
      var getUrlParameter = function getUrlParameter(sParam) {
          var sPageURL = myURL,
          sURLVariables = sPageURL.split('&'),
          sParameterName,
          i;
      
          return sURLVariables.filter(function(filters){
              return filters.includes(sParam);     
          }).map(function(filters){
              sParameterName = filters.split('=');
              if (sParameterName[0] !== undefined && sParameterName[0] === sParam && sParameterName[1] !== undefined) {
                  return  decodeURIComponent(sParameterName[1]);
              }        
          })
      }
      
      
      
      var filters = getUrlParameter('filter');
      
      console.log(filters);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-19
        • 1970-01-01
        • 1970-01-01
        • 2017-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多