将具有数组作为属性的对象转换为对象数组

时间:2020-02-29 01:48:55

标签: javascript arrays

我该如何转身

{"service":[["A"],["B"]],"cost":[[20],[50]]}

进入

[{service:"A", cost:20},{service:"B", cost:50}]

我什至不知道从哪里开始...

1 个答案:

答案 0 :(得分:1)

您可以围绕对象进行变换以获得所需的结果,首先,将.map()Object.entries()一起使用,将对象变换为以下内容:

[
  [
    {
      "service": "A"
    },
    {
      "service": "B"
    }
  ],
  [
    {
      "cost": 20
    },
    {
      "cost": 50
    }
  ]
]

接下来,使用以下命令将这两个内部数组压缩在一起(第一个数组的第一个元素与第二个数组的第一个元素分组,第一个数组的第二个元素与第二个数组的第二个元素分组) Object.assign()作为分组方法:

const obj = {"service":[["A"],["B"]],"cost":[[20],[50]]};
const [first, ...r] = Object.entries(obj).map(([k,vals]) => vals.map(([v]) => ({[k]: v})));
const zipped = first.map((o, i) => Object.assign(o, ...r.map(arr => arr[i])));

console.log(zipped);