返回所有宠物名字的数组

Returning an array of all the pet names

如果我要创建一个函数,如果输入了一个人的名字,我将如何 return 一个包含下面对象中宠物名称的数组,如果我是,最好的方法是什么使用 for 循环遍历它?我还没有完全了解 ES6 的一些功能,而且我是编码新手。

典型的所有者数组如下所示:

[ { 姓名:'Malcolm', 宠物:['Bear', 'Minu'], }, { 姓名:'Caroline', 宠物:['Basil', 'Hamish'], }, ];

感谢您的快速回复! :)

实现起来非常简单: 你用find函数搜索对应的主人,然后,如果你有主人,你return宠物键,根据提供的代码,它已经是一个数组。如果您没有与输入的名称相对应的所有者,那么您将得到“未定义”,但如果它更适合您的需要,您可以自定义此代码以具有空数组。

const data = [{
  name: 'Malcolm',
  pets: ['Bear', 'Minu'],
}, {
  name: 'Caroline',
  pets: ['Basil', 'Hamish'],
}, ];

const getPetsByOwnerName = (ownerName) => {
  const owner = data.find(d => d.name === ownerName);
  return owner ? owner.pets : undefined;
}

const carolinePets = getPetsByOwnerName('Caroline');

console.log(carolinePets);

编辑:作者要求使用循环

const data = [{
  name: 'Malcolm',
  pets: ['Bear', 'Minu'],
}, {
  name: 'Caroline',
  pets: ['Basil', 'Hamish'],
}, ];

function getPetsByOwnerNameWithLoop(ownerName) {
  for (let i = 0; i < data.length; i++) {
    if (data[i].name === ownerName) {
        return data[i].pets;
    }
  }
  
  return undefined;
}

const carolinePets = getPetsByOwnerNameWithLoop('Caroline');

console.log(carolinePets);

试试 filter() 方法。函数 returns 过滤所有者的名称数组作为结果。

示例代码:

const arr = [
    { name: 'Malcolm', pets: ['Bear', 'Minu'], },
    { name: 'Caroline', pets: ['Basil', 'Hamish'], }
];

function petsNames(val) {
    return arr.filter(x => x.name === val)[0].pets;    
};

console.log(petsNames('Malcolm'));

let ownersArray = [ { name: 'Malcolm', pets: ['Bear', 'Minu'], }, { name: 'Caroline', pets: ['Basil', 'Hamish'], }, ];

const petArray = (owner, ownersArray) => {
let array = ownersArray.filter((arr) => arr.name===owner)

  return array.length>0  ? array[0].pets : 'owner not found'

}
console.log(petArray("Caroline", ownersArray))