首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将字符串转换为具有重复键的对象转换为数组

将字符串转换为具有重复键的对象转换为数组
EN

Stack Overflow用户
提问于 2021-07-21 08:03:27
回答 3查看 72关注 0票数 0

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

代码语言:javascript
运行
复制
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');

所需输出:

代码语言:javascript
运行
复制
{
  "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"]
}

这是指向working fiddle的链接:https://jsfiddle.net/sjoh9rqp/

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-07-21 08:16:50

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

代码语言:javascript
运行
复制
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);

票数 4
EN

Stack Overflow用户

发布于 2021-07-21 08:19:34

使用URLSearchParams解析查询字符串有助于简化这一过程

代码语言:javascript
运行
复制
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"

const params = new URLSearchParams(string),
      res = {};


params.forEach((v,k)=> { 
  res[k] = res[k] || []
  res[k].push(v);  
})

console.log(res)

票数 3
EN

Stack Overflow用户

发布于 2021-07-21 08:14:30

对于多样性,以下是用reduce()解决的答案,尽管我必须承认URLSearchParams更优雅

代码语言:javascript
运行
复制
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"

let obj = string.split('&').reduce((b,a) => {
  let t = a.split('=');
  if (b.hasOwnProperty(t[0])) b[t[0]].push(t[1]);
  else  b[t[0]] =[t[1]];
  return b;
},{});
console.log(obj)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68462597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档