javascript - JavaScript 修改对象数组并更改包含的数据
问题描述
我在格式化某些数据时遇到了困难。目前,我收到以下结构的数据。
[
{
"q1":"5",
"q2":[
"13",
"12",
],
"q3":"test",
}
]
我基本上需要修改它甚至创建一个新对象,它采用以下结构。
[
{
id: 1, //q1
answers: [
{
answer: '5',
},
],
},
{
id: 2, //q2
answers: [
{
answer: '13',
},
{
answer: '12',
},
],
},
{
id: 3, //q3
answers: [
{
answer: 'test',
},
],
},
];
因此,上面的 id 将通过删除 q 并获取第一个数据对象中的数字来获得。然后它会有一个答案数组,每个答案都有一个对象。
我一直在尝试这个,但迷路了。我不知道我是否应该使用循环、映射、过滤器等。老实说,到目前为止我得到的最远的是获取密钥
var modified = data.map(function(item) {
return Object.keys(item)
})
我创建了一个JSFiddle,我一直在尝试这样做。
有什么方法可以实现我所追求的数据?
非常感谢
解决方案
请使用地图功能。
const data = {
"q1":"5",
"q2":[
"13",
"12",
],
"q3":"test",
};
const result = Object.keys(data).map(key => {
let item = {id: key.substring(1), answers: []};
if(typeof data[key] === "string")
item.answers.push({answer: data[key]});
else
item.answers = data[key].map(val => ({answer: val}));
return item;
});
console.log(result)
推荐阅读
- asp.net-core - .net core 2.2 中的 claimprincipal 有问题
- python-3.x - 我需要找出为什么 re.findall 有时不起作用?
- c# - 将文件写入磁盘后无法执行
- c++ - 在 C++ 中实现自己的字符串类
- c# - 是否可以在转义大括号之间使用字符串插值格式复合格式?
- r - 如何根据预定义的大小值将大型单变量数据帧拆分为多个较小的数据帧?
- java - Java:新的 Filter(){} 到 kotlin
- javascript - 阅读表格内的谷歌地图自动完成功能
- java - 从另一个进程捕获 system.out 消息
- python - 比较 CSV 值