JS/Vue开发:如何在rooms对象中搜索userId并返回对应房间key值
实现代码
你可以直接使用下方代码完成需求,兼容ES6+语法,可直接运行测试:
const userId = "321b66bb-b44f-4859-994a-a339e604df62"; const rooms = { "pre": [ { "id": "321b66bb-b44f-4859-994a-a339e604df62", "name": "George", "age": "27", "color": "#0B8043", "callIndex": 960433 }, { "id": "1111111-11111-1111-1111-111111111111", "name": "John", "age": "30", "color": "#0B8043", "callIndex": 4444444 }, ], "mid": [ { "id": "1111111-11111-1111-1111-111111111112", "name": "John2", "age": "30", "color": "#0B8043", "callIndex": 4444444 }, ], "post": [] }; // 核心查找函数 function findUserRoom(userId, rooms) { // 遍历所有房间键名 pre/mid/post for (const roomKey of Object.keys(rooms)) { // 检查当前房间的用户列表是否存在匹配id的用户 const isUserExist = rooms[roomKey].some(user => user.id === userId) if (isUserExist) return roomKey } // 所有房间都未匹配到返回null return null } // 测试调用 console.log(findUserRoom(userId, rooms)) // 输出 pre
方法说明(适配新手理解)
Object.keys(rooms):获取rooms对象所有的键名,返回值为['pre', 'mid', 'post']- 数组
some()方法:遍历数组元素,只要有1个元素满足判断条件就立即返回true、停止遍历,性能比全量遍历的forEach更优 - 如果偏好更简洁的写法,可以用下面的一行实现:
const findUserRoom = (userId, rooms) => Object.keys(rooms).find(key => rooms[key].some(u => u.id === userId)) ?? null
这里的??是空值合并运算符,当find方法未匹配到内容返回undefined时,会自动返回null,完全符合需求。
内容的提问来源于stack exchange,提问作者Matias
相关产品推荐
相关产品推荐

