You need to enable JavaScript to run this app. 如何匹配Item的rooms数组与Room对象ID并为Room添加关联count计数
优惠活动
大模型
产品
解决方案
定价
更多

如何匹配Item的rooms数组与Room对象ID并为Room添加关联count计数

Room对象关联频次统计与加工实现方案

处理思路

全程采用线性遍历的处理方式,既保证Item类型对象的原始结构完全不被修改,也避免多层嵌套循环带来的性能损耗:

  • 第一次遍历全量数组,只提取Item类型对象的rooms数组内的所有Room id,生成一个id到出现次数的映射字典
  • 第二次遍历全量数组做差异化加工:遇到Item对象就直接原样返回;遇到Room对象就从之前生成的字典里取对应id的计数值,新增count字段存这个值,没有匹配到关联的Room默认count为0

可直接复用的实现代码

// 替换为API实际返回的原始数组即可
const rawData = [ 
  {
    rooms: [ 'f03e6e40-870d-11eb-88a2-0149a30c02c5' ],
    itemType: 'Item',
    id: '8c6a6070-80c0-11eb-9753-bb149505e85f',
    itemName: 'Item 1',
  },
  {
    rooms: [ 'eef60fc0-870d-11eb-88a2-0149a30c02c5' ],
    itemType: 'Item',
    id: '3aede320-870f-11eb-9e58-9d6fb0d8b5a8',
    itemName: 'Item 2'
  },
  {
    rooms: [ 'f03e6e40-870d-11eb-88a2-0149a30c02c5' ],
    itemType: 'Item',
    id: '3ad52b00-870f-11eb-8f84-0782ebd81006',
    itemName: 'Item3' 
  },
  { 
    itemType: 'Room',
    id: 'f03e6e40-870d-11eb-88a2-0149a30c02c5',
    itemName: 'Bedroom'
  },
  { 
    itemType: 'Room',
    id: 'eef60fc0-870d-11eb-88a2-0149a30c02c5',
    itemName: 'Bedroom 2' 
  },
]

// 生成Room id的出现次数映射
const roomCountMap = {}
rawData.forEach(entry => {
  // 仅对Item类型对象做频次统计
  if (entry.itemType === 'Item') {
    entry.rooms.forEach(roomId => {
      // 对应id计数累加,初始不存在则设为1
      roomCountMap[roomId] = (roomCountMap[roomId] || 0) + 1
    })
  }
})

// 生成最终加工后的数组
const processedData = rawData.map(entry => {
  if (entry.itemType === 'Room') {
    // 为Room对象补充count字段
    return {
      ...entry,
      count: roomCountMap[entry.id] || 0
    }
  }
  // Item类型对象保持原结构直接返回
  return entry
})

边界场景提示

如果业务逻辑要求按「关联的Item数量」计数,而非按Room id的出现次数计数,只需要在统计阶段对每个Item的rooms数组做一层去重,避免同一个Item内重复引用同一个Room id导致的重复计数即可。


内容的提问来源于stack exchange,提问作者Pratap Penmetsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 16:36:10