【问题标题】:Manipulate JSON from TypeScript从 TypeScript 操作 JSON
【发布时间】:2021-04-14 10:11:35
【问题描述】:

我有以下 JSON 数据。

[{'connectionId': 1, 'roomId': 140, 'connectionName': 'Hai'},
 {'connectionId': 1, 'roomId': 147, 'connectionName': 'Hai'},
 {'connectionId': 2, 'roomId': 100, 'connectionName': 'hello'},
 {'connectionId': 2, 'roomId': 140, 'connectionName': 'hello'}]

我想使用 typescript 从上述数据中检索如下响应

  [ { 'connectionId': 1, 'roomId': [ 140, 147] , 'connectionName': 'Hai'} 
  , { 'connectionId': 2, 'roomId': [ 100, 140] , 'connectionName': 'hello'} 
  ] 
   

如何解决?

【问题讨论】:

    标签: javascript node.js arrays json typescript


    【解决方案1】:

    这样……

    const data = 
          [ { connectionId: 1, roomId: 140, connectionName: 'Hai' } 
          , { connectionId: 1, roomId: 147, connectionName: 'Hai' } 
          , { connectionId: 2, roomId: 100, connectionName: 'hello' } 
          , { connectionId: 2, roomId: 140, connectionName: 'hello' } 
          ] 
      , result = data.reduce((a,{connectionId,roomId,...more})=>
          {
          let p = a.find(x=>x.connectionId===connectionId)
          if(!p)
            {
            p = { connectionId, roomId:[],...more}
            a.push(p)
            }
          p.roomId.push(roomId)
          return a
          },[])
          
    console.log( result )
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

    • 如何再添加一个键。问题已更新
    • @AbdulManaf,只需添加 , ...more(见 udate)
    【解决方案2】:

    有很多方法可以做到这一点:使用 C 风格的循环、for of、for in、reduce... 这是一种相当干净的方法,应该适合你:

    const json = [{ connectionId: 1, roomId: 140 },
      { connectionId: 1, roomId: 147 },
      { connectionId: 2, roomId: 100 },
      { connectionId: 2, roomId: 140 },
    ]
    
    const formatted = [...new Set(json.map((x) => x.connectionId))]
      .map((id) => ({
        connectionId: id,
        roomId: [json.filter((x) => x.connectionId === id).map(({ roomId }) => roomId)]
      }))
    
    

    【讨论】:

      猜你喜欢
      • 2020-01-16
      • 2016-01-28
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 2020-07-13
      • 2018-09-22
      相关资源
      最近更新 更多