let teams = [
{ name : 'Patriots' },
{ name : 'Dolphins' },
{ name : 'Jets' },
{ name : 'Bills' }
]
let search = (name) => {
for( let i = 0; i < teams.length; i++ ) {
if( name === teams[i].name ) {
return teams[i];
}
return false;
}
}
console.log(search('Patriots')); // returns { name : 'Patriots }
console.log(search('Dolphins')); // return false
我正在尝试编写搜索功能来搜索对象数组。当我搜索第一个对象时,它返回它。当我搜索数组中的任何其他对象时,它返回false。有没有办法在转移到if else语句之前完全运行for loop
,还是有更好的方法可以做到这一点?
答案 0 :(得分:3)
您需要删除&#39; return false&#39;在for循环中,这是在循环经过第一个值之后触发,因此它永远不会达到2,3,4个属性/团队。
let teams = [
{ name : 'Patriots' },
{ name : 'Dolphins' },
{ name : 'Jets' },
{ name : 'Bills' }
]
let search = (name) => {
for( let i = 0; i < teams.length; i++ ) {
if( name === teams[i].name ) {
return teams[i];
}
}
// return 'false' if not found
return false
}
console.log(search('Patriots')); // returns { name : 'Patriots }
console.log(search('Dolphins')); // returns { name : 'Dolphins }
console.log(search('Oranges')); // returns false
return teams[i];
会在找到匹配值后停止循环。
我在for循环后添加了return false
,因此如果找不到团队名称,该函数将返回&#39; false&#39;。
答案 1 :(得分:1)
你可以使用filter和reduce来完成。
const teams = [
{ name : 'Patriots' },
{ name : 'Dolphins' },
{ name : 'Jets' },
{ name : 'Bills' }
]
const search = (arr, s) => arr.filter(({name}) => name === s).reduce((p,{name}) => name || p, false)
console.log(search(teams, 'Patriots'))