首页 > 解决方案 > 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,我一直在尝试这样做。

有什么方法可以实现我所追求的数据?

非常感谢

标签: javascriptjavascript-objects

解决方案


请使用地图功能。

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)


推荐阅读