window.location.search查询为JSON

thu*_*gsb 12 search jquery json window.location

有没有更好的方法将URL的location.search转换为对象?也许只是更有效率或减少?我正在使用jQuery,但纯JS也可以工作.

var query = window.location.search.substring(1), queryPairs = query.split('&'), queryJSON = {};
$.each(queryPairs, function() { queryJSON[this.split('=')[0]] = this.split('=')[1]; });
Run Code Online (Sandbox Code Playgroud)

Car*_*ann 24

这是一个纯JS函数.解析当前URL的搜索部分并返回一个对象.(对于可读性而言,它有点冗长.)

function searchToObject() {
  var pairs = window.location.search.substring(1).split("&"),
    obj = {},
    pair,
    i;

  for ( i in pairs ) {
    if ( pairs[i] === "" ) continue;

    pair = pairs[i].split("=");
    obj[ decodeURIComponent( pair[0] ) ] = decodeURIComponent( pair[1] );
  }

  return obj;
}
Run Code Online (Sandbox Code Playgroud)

在相关的说明中,您不是要将单个参数存储在"a JSON"中,而是存储在"对象"中.;)


Vyv*_*vIT 17

另请注意,有一个用于查询/操作搜索参数的 API:https : //developer.mozilla.org/en-US/docs/Web/API/URLSearchParams

var params = new URLSearchParams(window.location.search)
for (let p of params) {
  console.log(p);
}
Run Code Online (Sandbox Code Playgroud)


Ali*_*our 13

如果您使用的是现代浏览器,则会产生与接受的答案相同的结果:

function searchToObject(search) {
  return search.substring(1).split("&").reduce(function(result, value) {
    var parts = value.split('=');
    if (parts[0]) result[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
    return result;
  }, {})
}
Run Code Online (Sandbox Code Playgroud)


Cle*_*elm 7

可能是简单案例的最短解决方案:

location.search
  .slice(1)
  .split('&')
  .map(p => p.split('='))
  .reduce((obj, [key, value]) => ({ ...obj, [key]: value }), {});
Run Code Online (Sandbox Code Playgroud)


小智 5

我的方法,简单干净

var params = "?q=Hello World&c=Awesome";

params = "{\"" + 
         params
         .replace( /\?/gi, "" )
         .replace( /\&/gi, "\",\"" )
         .replace( /\=/gi, "\":\"" ) +
         "\"}";
  
params = JSON.parse( params );

alert( decodeURIComponent( params.q ) );
alert( decodeURIComponent( params.c ) );
Run Code Online (Sandbox Code Playgroud)