搜索对象数组

时间:2017-07-18 15:44:40

标签: javascript arrays function javascript-objects

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,还是有更好的方法可以做到这一点?

2 个答案:

答案 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'))