首页 > 解决方案 > 将字符串转换为具有重复键的对象到数组

问题描述

我有一个需要转换为对象的字符串。但是字符串有重复的项目。由于 JSON 对象不能包含具有相同键的 2 个项目。第二项是覆盖第一项。如何合并重复项并推送到数组?

var string = "test-1=owner&test-1=driver&test-2=Yes&test-3=2&test-4=sun&test-4=moon&test-5=not-agree&test-6=dogs&test-6=testing+js+object&test-7=Testing+js+function&test-7=Testing+js+array"

var stringMod = string.split("&");


var stringObj = {};

stringMod.forEach(function(json) {
  var jsonSplit = json.split("=");

  stringObj[jsonSplit[0]] = [jsonSplit[1]];
});

console.log(stringObj,'stringObj');

期望的输出:

{
  "test-1": ["owner","driver"],
  "test-2": ["Yes"],
  "test-3": ["2"],
  "test-4": ["sun","moon"],
  "test-5": ["not-agree"],
  "test-6": ["dogs","testing+js+object"],
  "test-7": ["Testing+js+function","Testing+js+array"]
}

这是工作小提琴的链接:https ://jsfiddle.net/sjoh9rqp/

你能帮我如何做到这一点吗?

标签: javascripthtmljqueryjsonobject

解决方案


您可以使用 URLSearchParams 来完成此操作,因为它会将字符串视为 url 参数,但它确实会进行解码。

var string = "test-1=owner&test-1=driver&test-2=Yes&test-3=2&test-4=sun&test-4=moon&test-5=not-agree&test-6=dogs&test-6=testing+js+object&test-7=Testing+js+function&test-7=Testing+js+array"

var data = new URLSearchParams(string);
var obj = {};
for (let x of data.keys()){
  obj[x] = data.getAll(x);
}
console.log(obj);


推荐阅读