如何用JavaScript的reduce替代flat实现数组合并扁平化?
用reduce替代flat合并房间玩家列表
现有如下数据:
- 房间名称数组:
const rooms = ['roomA', 'roomB', 'roomC'] - 房间玩家对象:
const roomOccupants = { 'roomA': [{name: 'player1'}, {name: 'player555'}], 'roomB': [{name: 'player2'}, {name: 'player3'}] }
如果用map配合flat可以实现合并,但你想用reduce替代flat直接得到一维玩家数组,代码实现如下:
实现代码
const roomABC = rooms.reduce((acc, room) => { // 处理不存在的房间,避免返回undefined const currentOccupants = roomOccupants[room] || []; // 将当前房间玩家合并到累加器数组 return acc.concat(currentOccupants); }, []);
结果验证
最终roomABC的输出就是期望的一维数组:
[{name: 'player1'}, {name: 'player555'}, {name: 'player2'}, {name: 'player3'}]
逻辑说明
reduce的初始值设为空数组[],作为累加器acc的起点- 遍历每个房间名时,先取出对应的玩家列表(没有则用空数组兜底)
- 通过
concat把当前房间的玩家数组合并到累加器中,每次迭代返回更新后的累加器 - 遍历结束后,累加器就是所有存在的房间玩家合并后的一维数组
内容的提问来源于stack exchange,提问作者Jereme
相关产品推荐
相关产品推荐

