如何在嵌套数组中根据颜色ID获取对应人员名称?
问题描述
需要编写一个方法,根据输入的颜色ID,返回对应人员的name字段。例如输入97时,应返回名称“Veli”。给定的数据结构如下:
const data = [ { id: 1, name: "Ali", colorList: [ { id: 99, color_name: 'yellow', } ], }, { id: 2, name: "Veli", colorList: [ { id: 98, color_name: 'red', }, { id: 97, color_name: 'blue', }, ] } ]
解决方案
这里提供几种实用的实现思路:
方法一:使用find和some
利用数组的find方法遍历人员列表,再通过some检查该人员的colorList中是否存在目标颜色ID:
function getUserNameByColorId(colorId) { const user = data.find(user => user.colorList.some(color => color.id === colorId)); return user ? user.name : null; } // 调用示例 console.log(getUserNameByColorId(97)); // 输出 "Veli" console.log(getUserNameByColorId(99)); // 输出 "Ali" console.log(getUserNameByColorId(100)); // 输出 null
方法二:预构建映射表提升查询效率
如果需要多次执行查询,提前构建颜色ID到用户名的映射表,能大幅提升后续查询速度:
// 提前构建映射关系 const colorIdToUserName = {}; data.forEach(user => { user.colorList.forEach(color => { colorIdToUserName[color.id] = user.name; }); }); // 查询方法 function getUserNameByColorId(colorId) { return colorIdToUserName[colorId] || null; } // 调用示例 console.log(getUserNameByColorId(97)); // 输出 "Veli"
方法三:基础嵌套循环实现
如果偏好原生循环写法,也可以用嵌套循环完成匹配:
function getUserNameByColorId(colorId) { for (const user of data) { for (const color of user.colorList) { if (color.id === colorId) { return user.name; } } } return null; } // 调用示例 console.log(getUserNameByColorId(97)); // 输出 "Veli"
内容的提问来源于stack exchange,提问作者oguzcan
相关产品推荐
相关产品推荐

