在Javascript(node js)中将带符号的字符串转换为键值映射
我有一个字符串,其中的参数用符号分隔,例如: orderid=55e3a83e&DealId=545435&Amount=590 如何将其转换为键/值映射 我目前的代码如下:在Javascript(node js)中将带符号的字符串转换为键值映射,javascript,node.js,dictionary,Javascript,Node.js,Dictionary,我有一个字符串,其中的参数用符号分隔,例如: orderid=55e3a83e&DealId=545435&Amount=590 如何将其转换为键/值映射 我目前的代码如下: const text = "orderid=55e3a83e&DealId=545435&Amount=590 ...." let _key = ""; let _value = ""; var myregexp = /([^&=]+)=(.*?)(?=
const text = "orderid=55e3a83e&DealId=545435&Amount=590 ...."
let _key = "";
let _value = "";
var myregexp = /([^&=]+)=(.*?)(?=&[^&=]+=|$)/g;
var match = myregexp.exec(text);
while (match != null && key !== "url") {
_key = match[1];
_value = match[2];
dict.push({
key: _key,
value: _value
});
match = myregexp.exec(subject);
}
但是太长了,有没有更好或更短的想法 您可以先按
&
拆分,然后按=
拆分每个元素,并构建一个键/值对
let mapper=(str)=>str.split('&').filter(Boolean).map(v=>{
让[key,value]=v.split('='))
返回{key,value}
})
log(映射器('orderid=55e3a83e&DealId=545435&Amount=590'))
您可以先按&
拆分,然后按=
拆分每个元素,并构建一个键/值对
let mapper=(str)=>str.split('&').filter(Boolean).map(v=>{
让[key,value]=v.split('='))
返回{key,value}
})
log(mapper('orderid=55e3a83e&DealId=545435&Amount=590'))
我一直使用一些与当前解决方案非常类似的代码:
function getUrlParams(input) {
var params = {};
input.replace(/[?&]+([^=&]+)=([^&]*)/g, (m, key, value) => {
params[key] = value;
});
return params;
}
当然,这不会忽略
URL
参数,它会返回一个普通的JS对象。。。但是你明白了。我一直在使用一些与当前解决方案非常相似的代码:
function getUrlParams(input) {
var params = {};
input.replace(/[?&]+([^=&]+)=([^&]*)/g, (m, key, value) => {
params[key] = value;
});
return params;
}
当然,这不会忽略
URL
参数,它会返回一个普通的JS对象。。。但是你明白了。这个字符串看起来像一个URL查询,你可以用它来解析它,下面是一个例子:
const usp=new URLSearchParams('orderid=55e3a83e&DealId=545435&Amount=590');
常量字典=[];
for(usp.entries()的常量[键,值]){
dictionary.push({key,value})
}
console.log(字典)代码>该字符串看起来像一个URL查询,您可以使用它进行解析,下面是一个示例:
const usp=new URLSearchParams('orderid=55e3a83e&DealId=545435&Amount=590');
常量字典=[];
for(usp.entries()的常量[键,值]){
dictionary.push({key,value})
}
console.log(字典)代码>所以返回值是一个对象而不是一个字典?如何从字典中获取值?我尝试过dict['key']
,但它没有产生任何价值。Thanks@JAN您需要使用find方法,因此返回值是一个对象而不是字典?如何从字典中获取值?我尝试过dict['key']
,但它没有产生任何价值。Thanks@JAN您需要使用find方法,来自CODEMANIAC的答案是很棒的,但是您需要考虑是否支持更复杂的查询字符串。许多地方通过重复一个键来传递查询中的数组,例如,“foo=1&bar=2&bar=3&bar=4”,它应该为[2,3,4]
的bar
返回一个值。大多数简单的技术都不能解决这个问题。但话说回来,你可能不需要。这是否回答了你的问题?CODEMANIAC的答案很好,但是您需要考虑是否支持更复杂的查询字符串。许多地方通过重复一个键来传递查询中的数组,例如,“foo=1&bar=2&bar=3&bar=4”,它应该为[2,3,4]
的bar
返回一个值。大多数简单的技术都不能解决这个问题。但话说回来,你可能不需要。这是否回答了你的问题?