JavaScript将String转换为对象

时间:2015-03-26 17:01:30

标签: javascript underscore.js lodash

使用js库(例如underscoreunderscore.stringlodash)的人,我想将以下字符串转换为对象

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

以下是常数:animalsfish。分隔符为=

结果如下:

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

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

谢谢!

PS它不是Parse query string in JavaScript的副本......因为要求是返回一个对象以供以后解析...

2 个答案:

答案 0 :(得分:0)

Quick vanilla 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;
}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

这有点紧凑:

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