代码之家  ›  专栏  ›  技术社区  ›  Adam

NodeJS-将对象数组转换为对象的对象

  •  0
  • Adam  · 技术社区  · 3 年前

    我正在尝试转换这个对象的数据数组

    const data = [
      {
        userid: 100,
        text: 'yea',
        new: true,
        datetime: 2018-09-04T20:21:17.000Z
      },
      {
        userid: 101,
        text: 'its heading to another new year... wow the time flies...',
        new: true,
        datetime: 2018-09-03T21:51:27.000Z
      },
      {
        userid: 102,
        text: 'wish you the same ...thanks',
        new: true,
        datetime: 2018-01-12T01:36:28.000Z
      }
    ]
    

    进入以下结构-Object of Objects

    {
        100: {
            userid: 100,
            text: 'yea',
            new: true,
            datetime: 2018-09-04T20:21:17.000Z
        },
        101: {
            userid: 101,
            text: 'its heading to another new year... wow the time flies...',
            new: true,
            datetime: 2018-09-03T21:51:27.000Z
          },
         102: {
            userid: 102,
            text: 'wish you the same ...thanks',
            new: true,
            datetime: 2018-01-12T01:36:28.000Z
          }
    }
    

    我试过了

    messages.map((data) => ({[Math.round(new Date(data.datetime).getTime() / 1000)]: data}))
    

    我得到结构,但map返回一个数组,我需要一个对象。一直在玩reduce()-还不走运。。

    谢谢你

    1 回复  |  直到 3 年前
        1
  •  1
  •   CertainPerformance    3 年前

    映射后,使用 Object.fromEntries [key, value] 转换为结果对象上的属性:

    const data = [
      {
        userid: 100,
        text: 'yea',
        new: true,
        datetime: `2018-09-04T20:21:17.000Z`
      },
      {
        userid: 101,
        text: 'its heading to another new year... wow the time flies...',
        new: true,
        datetime: `2018-09-03T21:51:27.000Z`
      },
      {
        userid: 102,
        text: 'wish you the same ...thanks',
        new: true,
        datetime: `2018-01-12T01:36:28.000Z`
      }
    ];
    
    const obj = Object.fromEntries(
      data.map(obj => [obj.userid, obj])
    );
    console.log(obj);