JavaScript 将字符串转换为对象

JavaScript convert String to object

伙计们,使用诸如underscoreunderscore.stringlodash之类的js库,我想将以下字符串转换为对象

'animals=cat&dogs&horses&fish=salmon&tuna';

以下是常量:animalsfish。分隔符是 =

结果应如下所示:

{
    animals: 'cats&dogs&horses',
    fish: 'salmon&tona'
}

animalsfish 可以任意顺序出现在字符串中。

谢谢!

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