簡體   English   中英

根據其他對象數組的屬性創建對象數組

[英]Create an array of objects based on property from other array of objects

我有一個普通的對象數組,需要根據時間將其轉換為新的指定對象數組。 相似的時間數據應該在同一個object。例如:

我有一組這樣的對象:

[
    {
        "id": 11,
        "roomId": 1,
        "startTime": "9",
        "name" : "xyz"
    },
    {
        "id": 12,
        "roomId": 2,
        "startTime": "9",
        "name" : "xyz2"
    },
    {
        "id": 13,
        "roomId": 3,
        "startTime": "10",
        "name" : "xyz3"
    },
    {
        "id": 14,
        "roomId": 1,
        "startTime": "9",
        "name" : "xyz4"
    }
]

最終結果應該是:

[
  {
    time: "9",
    blocks: {
      "1": [{
        name: 'xyz'
      }, 
      {
        name: 'xyz4'
      }],
      "2": [{
        name: 'xyz2'
      }]
    }
  },
  {
    time: "10",
    blocks: {
      "3": [{
        name: 'xyz3'
      }]
    }
  }
]
  • 使用Array#reduce迭代數組,同時更新Map ,其中startTime是鍵,對應的分組 object 是值
  • 在每次迭代中,獲取時間的當前記錄(如果存在)。 然后,更新塊 object。最后,使用新的詳細信息更新 map。
  • 使用Map#values ,按時間獲取分組對象列表

 const arr = [ { "id": 11, "roomId": 1, "startTime": "9", "name": "xyz" }, { "id": 12, "roomId": 2, "startTime": "9", "name": "xyz2" }, { "id": 13, "roomId": 3, "startTime": "10", "name": "xyz3" }, { "id": 14, "roomId": 1, "startTime": "9", "name": "xyz4" } ]; const res = [... arr.reduce((map, { id, roomId, startTime, name }) => { const current = map.get(startTime)?? { time: startTime, blocks: {} }; current.blocks[roomId] = [...(current.blocks[roomId]?? []), { name } ]; map.set(startTime, current); return map; }, new Map).values() ]; console.log(res);

您可以將Array.prototype.reduce()Destructuring assignment相結合, 傳播語法並使用Object.values()獲取結果值

代碼:

 const data = [{ id: 11, roomId: 1, startTime: '9', name: 'xyz' },{ id: 12, roomId: 2, startTime: '9', name: 'xyz2' },{ id: 13, roomId: 3, startTime: '10', name: 'xyz3' },{ id: 14, roomId: 1, startTime: '9', name: 'xyz4' }] const dataHash = data.reduce((a, { startTime: st, roomId, name }) => { a[st] = a[st] || { time: st, blocks: {} } a[st].blocks[roomId] = [...(a[st].blocks[roomId] || []), { name }] return a }, {}) const result = Object.values(dataHash) console.log(result)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM