Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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(node js)中将带符号的字符串转换为键值映射_Javascript_Node.js_Dictionary - Fatal编程技术网

在Javascript(node js)中将带符号的字符串转换为键值映射

在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 = /([^&=]+)=(.*?)(?=

我有一个字符串,其中的参数用符号分隔,例如:

orderid=55e3a83e&DealId=545435&Amount=590

如何将其转换为键/值映射

我目前的代码如下:

  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
返回一个值。大多数简单的技术都不能解决这个问题。但话说回来,你可能不需要。这是否回答了你的问题?