JavaScript 将字符串转换为对象
JavaScript convert String to object
伙计们,使用诸如underscore
、underscore.string
或lodash
之类的js库,我想将以下字符串转换为对象
'animals=cat&dogs&horses&fish=salmon&tuna';
以下是常量:animals
和 fish
。分隔符是 =
结果应如下所示:
{
animals: 'cats&dogs&horses',
fish: 'salmon&tona'
}
animals
和 fish
可以任意顺序出现在字符串中。
谢谢!
PS 它不是 Parse query string in JavaScript 的副本...因为要求 return 一个对象供以后解析...
快速香草 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;
}
这个比较紧凑:
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];
}
伙计们,使用诸如underscore
、underscore.string
或lodash
之类的js库,我想将以下字符串转换为对象
'animals=cat&dogs&horses&fish=salmon&tuna';
以下是常量:animals
和 fish
。分隔符是 =
结果应如下所示:
{
animals: 'cats&dogs&horses',
fish: 'salmon&tona'
}
animals
和 fish
可以任意顺序出现在字符串中。
谢谢!
PS 它不是 Parse query string in JavaScript 的副本...因为要求 return 一个对象供以后解析...
快速香草 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;
}
这个比较紧凑:
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];
}