【问题标题】:How to transform the nested array of objects in Javascript如何在 Javascript 中转换嵌套的对象数组
【发布时间】:2022-11-17 18:24:37
【问题描述】:

我有一个要转换的对象数组。它包含如下嵌套对象结构:

 [
      {
        geography: 'Austia',
        product: 'RTD Coffee',
        dataType: 'Off-Trade rsp (curr/con, local)',
        timeSeries: [
          {
            year: 2017,
            value: 0.148891823777856,
            highlight: 1,
          },
          {
            year: 2018,
            value: 0.148965642232877,
            highlight: 1,
          },
          {
            year: 2019,
            value: 0.149039460687898,
            highlight: 1,
          },
          {
            year: 2020,
            value: 0.149113279142919,
            highlight: 1,
          },
          {
            year: 2021,
            value: 0.149187097597941,
            highlight: 1,
          },
          {
            year: 2022,
            value: 0.149260916052962,
            highlight: 1,
          },
        ],
      },...
    ];

我想将其转换为以下模式,其中提取 TimeSeries 数组对象属性并将其映射到顶层,如下所示:

[
  {
    geography: 'Austria',
    product: 'RTD Coffee',
    dataType: 'Off-Trade rsp (curr/con, local)',
    2017: 0.148891823777856,
    2018: 0.148965642232877,
    2019: 0.149039460687898,
    2020: 0.149113279142919,
    2021: 0.149187097597941,
    2022: 0.149260916052962,
  },
]

我该怎么做?

【问题讨论】:

  • 你尝试了什么?
  • 我尝试使用 flatMap 来展平 json,但它似乎没有用。
  • 这显然与扁平化无关,因为您将一个值用作新对象的键,将另一个值用作值
  • 您不希望 flatMap 在这里,您没有嵌套数组。您想要将数组转换为对象。您可以查找 reduceObject.fromEntries 以生成该对象。至于外层数组,map就够了

标签: javascript arrays typescript


【解决方案1】:

尝试这个

function extractYearValue(arr) {
  return arr.map(({timeSeries, ...element}) => {
    const objYearValue = timeSeries.reduce((prev, curr) => {
        return {...prev, [curr.year]: curr.value}
    }, {})
    return {...element, ...objYearValue}
  })
}

【讨论】:

    猜你喜欢
    • 2020-07-07
    • 2017-05-16
    • 2018-01-24
    • 2016-04-13
    • 1970-01-01
    • 2021-12-13
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多