微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将字符串转换为具有重复键的对象到数组

我有一个需要转换为对象的字符串。但是字符串有重复的项目。由于 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/

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

解决方法

您可以使用 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);

,

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

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)

,

对于多样性,这里是用 reduce() 解决的答案,尽管我不得不承认 URLSearchParams 更优雅

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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?