Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript将字符串转换为对象_Javascript_Underscore.js_Lodash - Fatal编程技术网

JavaScript将字符串转换为对象

JavaScript将字符串转换为对象,javascript,underscore.js,lodash,Javascript,Underscore.js,Lodash,各位,使用js库,例如下划线,下划线.string,或lodash,我想将以下字符串转换为一个对象 'animals=cat&dogs&horses&fish=salmon&tuna'; 以下是常量:动物和鱼。分隔符为= 结果应该如下所示: { animals: 'cats&dogs&horses', fish: 'salmon&tona' } 动物和鱼可以以任何顺序出现在字符串中 谢谢 PS这不是…的复制品。。。由于要

各位,使用js库,例如
下划线
下划线.string
,或
lodash
,我想将以下字符串转换为一个对象

'animals=cat&dogs&horses&fish=salmon&tuna';
以下是常量:
动物
。分隔符为
=

结果应该如下所示:

{
    animals: 'cats&dogs&horses',
    fish: 'salmon&tona'
}
动物
可以以任何顺序出现在字符串中

谢谢


PS这不是…的复制品。。。由于要求返回一个对象以供以后解析…

Quick vanilla js解决方案:

函数解析查询(字符串){
var result={},components,i,firstPair,current;
components=string.split(“&”);
对于(i=0;i}
这是一个更紧凑的设计:

var x = 'animals=cat&dogs&horses&fish=salmon&tuna';
使用
Split
功能拆分字符串,该功能保留拆分器,拆分器是拆分regexp中的组。我们对任何从字符串开头或以
&
开头,并在末尾包含
=
的内容进行拆分:

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];
}
var result={};

对于(var i=0;它是一个重复项。请参见此处:顺便说一句,在Javascript中,字符串是对象。正确的标题应该是:将查询转换为键值object@david,很好的预感,但我真的需要逃避
&
,因此使用
请求。_parsedUrl.query
而不是
请求.query
。谢谢!那么我怎么才能在loo中得到结果呢king for?:)你在链接中看到了吗?@torazaburo,查询字符串在我的情况下是正确的,因此我发布了这个问题。我真的希望有人回答这个问题,而不是链接到stackoverflow上的其他问题:)但这不会给出期望的结果,因为符号与用于值本身内部和值之间的分隔。它适用于样本,也适用于任何其他模式:
key=val&val&key=val&val
。通过检查是否包含
=
,可以区分带有键的组件;这绕过了符号的模糊性。