JS如何编写函数从动物对象数组中按名称查找对应动物对象
现有代码的问题
- 参数顺序错误:需求要求函数第一个参数是动物名称字符串,第二个是动物对象数组,你当前定义的参数顺序刚好相反
array.indexOf(string)逻辑错误:indexOf只能匹配数组中全等于传入值的元素,你的数组里存储的是对象,不可能和字符串全等,所以这个判断永远返回falsereturn string[animals]逻辑完全错误:string是传入的名称字符串,animals是未定义变量,既拿不到对应的动物对象,运行还会直接报错
正确实现
最简写法(ES6+支持)
直接用数组内置的find方法,会自动遍历数组返回第一个符合条件的元素,找不到就返回undefined,我们转成返回null即可:
// 第一个参数是要查找的动物名称,第二个是动物对象数组 function search(animalName, animalArray) { return animalArray.find(item => item.name === animalName) ?? null }
如果运行环境不支持空值合并运算符??,可以改成兼容性更好的三元判断写法:
function search(animalName, animalArray) { const target = animalArray.find(function(item) { // 如果你对象里存储名称的属性叫“名称”,就把item.name改成item.名称 return item.name === animalName }) return target ? target : null }
基础循环写法(更易理解底层逻辑)
function search(animalName, animalArray) { // 遍历数组中的每一个动物对象 for (let i = 0; i < animalArray.length; i++) { const currentAnimal = animalArray[i] // 匹配当前对象的名称属性和传入的搜索名称 if (currentAnimal.name === animalName) { // 匹配成功直接返回当前对象 return currentAnimal } } // 遍历完所有元素都没匹配到,返回null return null }
内容的提问来源于stack exchange,提问作者rakuske
相关产品推荐
相关产品推荐

