javascript - 将URL哈希参数转换为对象(键值对)的函数

标签 javascript hash

考虑这个字符串:#page?param1=a¶m2=b¶m3=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' }

最佳答案

你可以使用这个函数:

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

这取自 larger set of functionality on github.parseParms() 方法我写的是将 URL 解析成它的所有部分。

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

"aaa=1&bbb=99&name=Bob"

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

{aaa: 1, bbb: 99, name: "Bob"}

因此,如果字符串中除了上述参数之外还有其他内容,那么您需要先删除这些内容,然后再调用此函数。

工作演示:

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

关于javascript - 将URL哈希参数转换为对象(键值对)的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23481979/

相关文章:

javascript - Angular 5 document.querySelector ('ClassName' ).innerHTML 不包含内联的 css

javascript - 将 L.BeautifyMarkers 与 L.MarkerClusters 一起使用

perl - Perl中的匿名哈希是什么?

c++ - 哈希算法的测试台流程是什么?

javascript - JS 模块 - ReferenceError : <function> is not defined

javascript - 是否可以将 "text/javascript"假定为 &lt;script&gt; 元素的事实上的默认值?

javascript - 如何将非常大的十进制数转换为字符串?

ruby-on-rails - 如何按 Ruby 中的不同元素对混合数组进行排序?

security - SHA-256 哈希值能否从相同数据的 SHA-512 哈希值导出?

algorithm - 布隆过滤器及其多个哈希函数