搜索

首页  >  问答  >  正文

将url后的参数键值对转换成JSON数组格式效率最高的方法?

将http: //www.a.com/admin/index.php#route=main/nav&user=tom&id=123/profile

后的参数转换成:

    [
    {"router":"main"},
    {
    "nav":"",
    "user":"tom",
    "id":"123"
    },
    {"profile":""}
    ]

除了循环变量有没有更简洁的方法

高洛峰高洛峰2944 天前939

全部回复(3)我来回复

  • 三叔

    三叔2016-11-10 15:48:59

    var url = 'http: //www.a.com/admin/index.php?route=main/nav=&user=tom&id=123/profile',
        result = [];
    
    url.substring(url.indexOf('?') + 1)
        .replace(/[^\/]+/g, function(objstr) {
            var obj = {},
                empty = false;
            objstr.replace(/([^\/&=]+)(=([^\/&=]+)?)?/g, function(s, a, b, c) {
                if(a && b && c){
                    obj[a] = c;
                }else if(a && !c){
                    obj[a] = '';
                }else{
                    empty = true;
                }
            });
            if(!empty){
                result.push(obj);
            }
        });
    
    console.log(result);


    回复
    0
  • 欧阳克

    欧阳克2016-11-10 15:48:41

    var url = location.search.substr(1);
        param = {};
    console.log(url);
    url.replace(/([^?&]+)=([^?&]+)/g, function(s, v, k) {
        param[v] = decodeURIComponent(k);
        return k + '=' +  v;
    });
    console.log(param);


    回复
    0
  • 三叔

    三叔2016-11-10 15:48:27

    坐等更好方案:

    'use strict';
    
    var url = 'http: //www.a.com/index.php?route=main&nav&user=tom&id=123&profile';
    
    var querys = url
        .substring(url.indexOf('?') + 1)
        .split('&')
        .map((query) => query.split('='))
        .reduce((params, pairs) => (params[pairs[0]] = pairs[1] || '', params), {});
    
    console.log(querys);
    //{ route: 'main', nav: '', user: 'tom', id: '123', profile: '' }


    回复
    0
  • 取消回复