JS对象练习题:统计登录/高分用户、查找MERN栈开发者
关于是否需要使用
Object.keys(obj)的说明 不是必须用这个方法。JS遍历普通对象有多种实现方案,除了Object.keys(),Object.values()、Object.entries()、for...in循环都能满足需求,不需要强制用某一个API,根据场景选最顺手的就行。比如这几道题不需要单独操作用户名键的场景下,用Object.values()直接取每个用户的属性对象遍历,代码会更简洁。
题目1:统计两类用户数量
需求是分别统计已登录用户数、积分大于等于50的用户数,实现代码如下:
// 初始化两个计数器 let loggedInCount = 0; let pointsOver50Count = 0; // 遍历所有用户的属性对象 for (const user of Object.values(users)) { if (user.isLoggedIn) loggedInCount++; if (user.points >= 50) pointsOver50Count++; } // 运行结果 // 已登录用户数:2(对应用户Brook、John) // 积分≥50用户数:3(对应用户Asab、Brook、John)
题目2:筛选所有MERN栈开发者
首先明确MERN栈的四个核心必备技能:MongoDB、Express、React、Node,需要筛选出技能列表同时包含这四项的用户,实现代码如下:
// 定义MERN栈必备技能清单 const mernRequiredSkills = ['MongoDB', 'Express', 'React', 'Node']; const mernDevelopers = []; for (const [username, userInfo] of Object.entries(users)) { // 检查当前用户是否覆盖所有必备技能 const isQualified = mernRequiredSkills.every(skill => userInfo.skills.includes(skill)); if (isQualified) { mernDevelopers.push({ username, ...userInfo }); } } // 运行结果 // 符合要求的MERN开发者共2位:Asab、Paul // 注意John的技能中是Node.js而非Node,不满足筛选条件
补充:不用Object静态方法的写法
如果还没熟悉Object.keys/values/entries系列API,用基础的for...in循环也能实现完全一样的效果,以统计登录用户数为例:
let loggedInCount = 0; // for...in会遍历对象的所有可枚举键 for (const username in users) { // 通过键取到对应的用户对象再判断属性 if (users[username].isLoggedIn) { loggedInCount++; } }
内容的提问来源于stack exchange,提问作者Yuvraj Raghuvanshi
相关产品推荐
相关产品推荐

