使用js库(例如underscore
,underscore.string
或lodash
)的人,我想将以下字符串转换为对象
'animals=cat&dogs&horses&fish=salmon&tuna';
以下是常数:animals
和fish
。分隔符为=
结果如下:
{
animals: 'cats&dogs&horses',
fish: 'salmon&tona'
}
animals
和fish
可以按任何顺序出现在字符串中。
谢谢!
PS它不是Parse query string in JavaScript的副本......因为要求是返回一个对象以供以后解析...
答案 0 :(得分:0)
Quick vanilla js解决方案:
function parseQuery (string) {
var result = {}, components, i, firstPair, current;
components = string.split("&");
for (i = 0; i < components.length; i++) {
if (components[i].indexOf("=") !== -1) {
if (typeof current !== "undefined") {
result[current] = result[current].join("&");
}
firstPair = components[i].split("=");
current = firstPair[0];
result[current] = [firstPair[1]];
} else {
result[current].push(components[i]);
}
}
result[current] = result[current].join("&");
return result;
}
&#13;
答案 1 :(得分:0)
这有点紧凑:
var x = 'animals=cat&dogs&horses&fish=salmon&tuna';
使用split
的功能拆分字符串,该功能保留分割符,这些分割符是拆分正则表达式中的组。我们拆分了从字符串开头或&
开始的任何内容,最后包含=
:
var pieces = x.split(/((?:^|&)\w+=)/) . filter(Boolean);
>> ["animals=", "cat&dogs&horses", "&fish=", "salmon&tuna"]
结果将是散布的键名和值的数组。将此处理为一个对象:
var result = {};
for (var i=0; i<pieces.length; i+=2) {
result[pieces[i].replace(/^&|=$/g, '')] = pieces[i+1];
}