javascript - 将字符串转换为具有重复键的对象到数组
问题描述
我有一个需要转换为对象的字符串。但是字符串有重复的项目。由于 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);
推荐阅读
- c# - 将关键字“this”传递给子表单时不可用
- c - 在c中释放指针后如何保存指针地址
- oracle - 每当表行更新时,在 Oracle 数据库上添加列,该列存储当前日期/时间
- python - Python 键和值中的嵌套字典
- google-apps-script - 如何使用从远程 JSON 请求获得的值加载一个谷歌电子表格单元格?
- scala - “sbt clean compile”未解决的依赖关系
- java - 从 TCP/IP 连接读取双精度值 (JAVA)
- javascript - 禁用单击复选框;让父 div 处理
- matlab - 当我添加新输入时,如何使以前的输入在 Matlab 图中逐渐淡出
- webstorm - jsdoc:用模板扩展类型(用泛型扩展类型)