如何使用JavaScript将对象数组转换为按办公地点分组的键值对象
JavaScript对象数组转位置键值对解决方案
实现思路
- 先基于已知的
Locations常量初始化结果对象,确保所有指定位置都作为键存在(无对应数据时默认是空数组) - 使用
reduce方法遍历输入数组,将每个元素归入对应officeLocation的数组中
完整实现代码
// 已知常量 const Locations = ["locOne","locTwo"] // 输入数组 const inputArr = [ { "userId": "234d5aa0", "officeLocation": "locOne", }, { "userId": "234d5aa0", "officeLocation": "locOne", }, { "userId": "fecac9a9ecb8", "officeLocation": "locTwo", } ] // 转换逻辑 const result = inputArr.reduce((acc, item) => { // 仅处理在Locations中定义的位置,过滤脏数据 if (acc.hasOwnProperty(item.officeLocation)) { acc[item.officeLocation].push(item) } return acc // 初始化累加器,预填充所有位置为空白数组 }, Locations.reduce((initAcc, loc) => ({...initAcc, [loc]: []}), {})) console.log(result)
补充说明
你示例中locOne数组第一个userId为234d5a属于笔误,上述代码会保留原始数据的userId值,如果需要对userId做截断处理,在push前添加对应逻辑即可:
// 示例:userId截断前6位 acc[item.officeLocation].push({...item, userId: item.userId.slice(0,6)})
内容的提问来源于stack exchange,提问作者Sahil
相关产品推荐
相关产品推荐

