如何将数组转换为对象?人员数组按年龄区间分组实现需求
实现按年龄区间分组成年人的函数
我来帮你搞定这个分组需求,咱们一步步来实现符合要求的groupAdultsByAgeRange函数:
先明确核心规则
从示例和描述里,我们能提炼出关键逻辑:
- 只处理成年人(示例中9岁的Henry被排除,所以默认年龄≥18才算成年人)
- 按固定年龄区间分组,空区间不会出现在结果里
- 空输入直接返回空对象
完整代码实现
function groupAdultsByAgeRange(people) { // 空输入直接返回空对象 if (!people.length) return {}; // 第一步:过滤出成年人 const adults = people.filter(person => person.age >= 18); // 初始化所有可能的年龄区间容器 const ageGroups = { '20 and younger': [], '21-30': [], '31-40': [], '41-50': [], '51 and older': [] }; // 第二步:把成年人分配到对应区间 adults.forEach(person => { const age = person.age; if (age <= 20) { ageGroups['20 and younger'].push(person); } else if (age <= 30) { ageGroups['21-30'].push(person); } else if (age <= 40) { ageGroups['31-40'].push(person); } else if (age <= 50) { ageGroups['41-50'].push(person); } else { ageGroups['51 and older'].push(person); } }); // 第三步:移除没有人员的空区间 Object.keys(ageGroups).forEach(key => { if (!ageGroups[key].length) delete ageGroups[key]; }); return ageGroups; }
测试验证示例
示例1测试
console.log(groupAdultsByAgeRange([{name: "Henry", age: 9}, {name: "John", age: 20}])); // 输出:{ '20 and younger': [ { name: 'John', age: 20 } ] }
Henry因是未成年人被过滤,John被分到对应区间。
示例2测试
console.log(groupAdultsByAgeRange([{name: "Anna", age: 31}, {name: "John", age: 32}, {name: "Hank", age: 60}])); // 输出:{ '31-40': [ { name: 'Anna', age: 31 }, { name: 'John', age: 32 } ], '51 and older': [ { name: 'Hank', age: 60 } ] }
Anna和John进入31-40区间,Hank进入51及以上区间,空区间自动被移除。
空输入测试
console.log(groupAdultsByAgeRange([])); // 输出:{}
这个实现逻辑清晰,完全贴合需求,还能灵活处理各种边界情况~
内容的提问来源于stack exchange,提问作者Eslam Haridy
相关产品推荐
相关产品推荐

