【问题标题】:how to transform object of objects to object of array of objects js如何将对象的对象转换为对象数组的对象js
【发布时间】:2020-07-08 21:46:22
【问题描述】:

我目前正在处理一个包含日历屏幕的react-native 项目。我为日历本身使用react-native calendars 议程组件,为项目本身使用firebase 实时数据库。我在创建自己的数据库方面非常陌生,因此难以让我们的数据结构正确。 目前,我从数据库中获取数据为

{
'2020-07-01': {time: "12:00", topic: "Type Casting in JavaScript"}
'2020-07-03': {time: "12:00", topic: "JavaScript basics"}
'2020-07-06': {time: "12:00", topic: "Parallax Scrolling"}
}

但其他本地日历议程仅接受以下形式的数据

{
'2020-07-01': [{time: "12:00", topic: "Type Casting in JavaScript"}]
'2020-07-03': [{time: "12:00", topic: "JavaScript basics"}]
'2020-07-06': [{time: "12:00", topic: "Parallax Scrolling"}]
}

转换输出的最佳方法是什么?

【问题讨论】:

    标签: javascript firebase react-native firebase-realtime-database


    【解决方案1】:
    const OBJECT = {
    '2020-07-01': {time: "12:00", topic: "Type Casting in JavaScript"},
    '2020-07-03': {time: "12:00", topic: "JavaScript basics"},
    '2020-07-06': {time: "12:00", topic: "Parallax Scrolling"},
    };
    
    console.log(
        Object.fromEntries(Object.entries(OBJECT).map(([key, val]) => [key, [val]]))
    );
    

    Here is working solution

    【讨论】:

      【解决方案2】:

      const obj = {
      '2020-07-01': {time: "12:00", topic: "Type Casting in JavaScript"},
      '2020-07-03': {time: "12:00", topic: "JavaScript basics"},
      '2020-07-06': {time: "12:00", topic: "Parallax Scrolling"}
      }
      
      const transformed = {};
      for (const date in obj) {
        transformed[date] = [obj[date]]
      }
      console.log(transformed)

      【讨论】:

        【解决方案3】:

        使用reduce

        const data = {
        '2020-07-01': {time: "12:00", topic: "Type Casting in JavaScript"},
        '2020-07-03': {time: "12:00", topic: "JavaScript basics"},
        '2020-07-06': {time: "12:00", topic: "Parallax Scrolling"}
        }
        
        const normalized = Object.keys(data).reduce( (acc, key) => {
          acc[key] = [data[key]]
          
          return acc
        }, {})
        
        console.log(normalized)

        【讨论】:

          【解决方案4】:

          编写一个函数将数据转换成你需要的结构。

          const dataToTransform = {
          '2020-07-01': {time: "12:00", topic: "Type Casting in JavaScript"},
          '2020-07-03': {time: "12:00", topic: "JavaScript basics"},
          '2020-07-06': {time: "12:00", topic: "Parallax Scrolling"}
          }
          
          const transformData = (input) => {
            const output = {} // object to return with transformed data
            Object.keys(input).forEach( key => {
              output[key] = [input[key]] // do whatever transformation here 
                                         // for each key/value pair
            })
            return output
          }
          
          const transformedData = transformData(dataToTransform)
          
          const pre = document.getElementById('display')
          pre.textContent = JSON.stringify(transformedData)
          console.log(transformedData)
          <body>
          <pre id='display'>
          </pre>
          </body>

          注意有多种方法可以实现transformData。这只是一个例子。

          【讨论】:

            猜你喜欢
            • 2022-01-23
            • 2020-06-15
            • 2016-03-11
            • 1970-01-01
            • 1970-01-01
            • 2015-01-03
            • 2018-01-04
            • 2022-01-20
            • 2017-01-14
            相关资源
            最近更新 更多