使用点/方括号表示法获取宠物列表失败,求实现宠物名称提取函数
解决方法:合并所有主人的宠物列表
你直接用people.pets或people['pets']取不到宠物列表,核心原因是people是数组类型,不是单个主人对象——你得遍历数组里的每一个对象,才能拿到对应每个主人的pets数组,再把这些数组合并成一维数组。
下面是几种实用的实现方式:
1. 用flatMap(最简洁)
flatMap会先映射每个元素到pets数组,再自动拍平嵌套结构:
function getAllPets(people) { return people.flatMap(person => person.pets); }
2. 用map + flat(兼容性稍好)
如果你的运行环境不支持flatMap,可以拆分两步:
function getAllPets(people) { return people.map(person => person.pets).flat(); }
3. 手动遍历收集(最基础)
用循环手动收集所有宠物,适合理解底层逻辑:
function getAllPets(people) { const allPets = []; for (const person of people) { allPets.push(...person.pets); } return allPets; }
测试示例
输入:
const people = [ { name: 'Malcolm', pets: ['Bear', 'Minu'], }, { name: 'Caroline', pets: ['Basil', 'Hamish'], }, ];
调用getAllPets(people)会返回:['Bear', 'Minu', 'Basil', 'Hamish']
若传入空数组getAllPets([]),则返回空数组[],符合要求。
内容的提问来源于stack exchange,提问作者phillee20
相关产品推荐
相关产品推荐

