将带有&符号的字符串转换为Javascript(节点js)的键值映射图

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

  

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);
      }

但是太长了,对更好或更短的东西有什么想法吗?

sv37vs 回答:将带有&符号的字符串转换为Javascript(节点js)的键值映射图

您可以先用&拆分,然后再用=拆分每个元素,然后构建键/值对

let mapper = (str) => str.split('&').filter(Boolean).map(v => {
  let [key,value] = v.split('=')
  return { key,value }
})
console.log(mapper('orderid=55e3a83e&DealId=545435&Amount=590 '))


如果需要以单个对象的形式输出

let mapper = (str) => {
  let splitted = str.split('&').map(v => v && v.split('=')).filter(Boolean)
  return Object.fromEntries(splitted)
}

console.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对象...但是您明白了。

,

该字符串看起来像一个URL查询,您可以使用URLSearchParams来解析它,下面是一个示例:

const usp = new URLSearchParams('orderid=55e3a83e&DealId=545435&Amount=590');

const dictionary = [];

for (const [key,value] of usp.entries()) {
  dictionary.push({ key,value})
}

console.log(dictionary);

本文链接:https://www.f2er.com/3157831.html

大家都在问