我如何更改JSON结构呢?

时间:2020-07-10 12:26:38

标签: javascript json

我从后端获得的响应位于结构JSON下方。

[
{
"carrier": "Emirates",
"stops": "stops-0",
"date": "Jul 18",
"min": 1407,
"avg": 1407,
"max": 1407
},
  {
"carrier": "Ethiopian Airlines",
"stops": "stops-1",
"date": "Jul 19",
"min": 5151,
"avg": 5151,
"max": 5151
}
]

需要按如下所示更改结构

[
{
"carrier": "Emirates",
"stops": "stops-0",
"date": "Jul 18",
"min": 1407,
},
{
"carrier": "Emirates",
"stops": "stops-0",
"date": "Jul 18",
"avg": 1407,
},
{
"carrier": "Emirates",
"stops": "stops-0",
"date": "Jul 18",
"max": 1407
},
  {
"carrier": "Ethiopian Airlines",
"stops": "stops-1",
"date": "Jul 19",
"min": 5151,
},
 {
"carrier": "Ethiopian Airlines",
"stops": "stops-1",
"date": "Jul 19",
"avg": 5151,
},
 {
"carrier": "Ethiopian Airlines",
"stops": "stops-1",
"date": "Jul 19",
"max": 5151
}
]

我需要转换为范围的数据,范围是min,avg,max ..是否可以在javascript中转换数据。?

1 个答案:

答案 0 :(得分:1)

当然有很多方法可以做到这一点,但我将向您展示一种方法:

您可以将每个条目替换为三个单独的条目,从而在此过程中展平阵列。

function convert (arr) {
  return arr.flatMap(({ min, avg, max, ...commonFields }) => [
    { ...commonFields, min },
    { ...commonFields, avg },
    { ...commonFields, max }
  ])
}

Array.prototype.flatMap函数就像Array.prototype.map的组合(使用它可以将数组的每个元素映射到新计算的元素,从而获得一个将所有元​​素映射到末尾的新数组),并且Array.prototype.flat(以“展平”嵌套数组,即将[[a, b, c], [d, e, f]]变成[a, b, c, d, e, f])。

在此,我们将每个元素替换为具有所需属性的三个元素。 ...commonFields语法使我们可以将所有其余字段(在您的情况下为carrierstopsdate)作为一个对象传递,而不必单独列出它们。

(感谢评论者adiga-我有一个mapflat的解决方案,却忘记了flatMap的存在。)