20

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]; });
4

10 に答える 10

34

これは純粋な 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;
}

関連するメモとして、単一のパラメーターを「JSON」ではなく「オブジェクト」に保存しようとしています。;)

于 2011-08-17T08:52:45.520 に答える
14

最新のブラウザーを使用している場合、これは受け入れられた回答と同じ結果を生成します。

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;
  }, {})
}
于 2014-12-29T14:56:15.510 に答える
12

おそらく単純なケースの最短の解決策:

location.search
  .slice(1)
  .split('&')
  .map(p => p.split('='))
  .reduce((obj, [key, value]) => ({ ...obj, [key]: value }), {});
于 2017-11-22T21:55:33.067 に答える
3

シンプルでクリーンな私のアプローチ

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 ) );

于 2016-10-15T16:16:07.440 に答える