将URL哈希参数转换为对象的功能(键值对)

jsk*_*dd3 4 javascript hash

考虑这个字符串: #page?param1=a&param2=b&param3=c

我一直致力于使用混合应用程序window.location.hash将应用程序路由到正确的页面.通常,这些URL包含散列后的参数.当然,这不是标准,但它是一个很好的解决方案,适用于我们的应用程序.

我需要创建一个函数,它将获取散列中的所有参数并将它们返回到对象中,例如: {param: value}.

我尝试了其他问题解决方案,window.location.search但遗憾的是,当参数在哈希之后时,只返回一个空字符串.

我的尝试看起来像这样:

return JSON.parse('{"' + decodeURI(window.location.hash).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}');

该解决方案取自另一个使用window.location.search但使用window.location.hash不正常的问题,第一个参数(在问号之后)显示为未定义.

如何创建一个可以在对象中返回哈希参数的函数?

上面字符串的期望结果是:

{ param1: 'a', param2: 'b', param3: 'c' }
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 12

你可以使用这个功能:

function parseParms(str) {
    var pieces = str.split("&"), data = {}, i, parts;
    // process each query pair
    for (i = 0; i < pieces.length; i++) {
        parts = pieces[i].split("=");
        if (parts.length < 2) {
            parts.push("");
        }
        data[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
    }
    return data;
}
Run Code Online (Sandbox Code Playgroud)

这取自我在github上用于解析URL到其所有部分.parseParms()更大功能集的方法.

输入是以下形式的字符串:

"aaa=1&bbb=99&name=Bob"
Run Code Online (Sandbox Code Playgroud)

它会返回一个这样的对象:

{aaa: 1, bbb: 99, name: "Bob"}
Run Code Online (Sandbox Code Playgroud)

所以,如果除了上面的参数之外你还在字符串中有其他东西,那么在调用这个函数之前你需要先删除它们.

工作演示:

function parseParms(str) {
    var pieces = str.split("&"), data = {}, i, parts;
    // process each query pair
    for (i = 0; i < pieces.length; i++) {
        parts = pieces[i].split("=");
        if (parts.length < 2) {
            parts.push("");
        }
        data[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
    }
    return data;
}

console.log(parseParms("aaa=1&bbb=99&name=Bob"));
Run Code Online (Sandbox Code Playgroud)