2016-07-12 84 views
0

我比较几个信息,并试图获得正确的对象。 但我不能将输出返回到它自己的功能。从外部函数返回值

channelUserRight: function(channel, nickname){ 

     userlist.forEach(function(chaninfo) { 
      if(chaninfo.channel === channel && chaninfo.name === nickname){ 
       // Whenever I do console.log it shows me output 
       console.log(chaninfo); 
       return chaninfo; 
      }   
     }); 

    } 
// Here it shows me 'undefined' 
console.log(channelUserRight(channel, user)) 
channelUserRight(channel, user) 

因此,在函数内部我得到正确的对象,但不在函数之外。

+1

你的'channelUserRight'没有返回任何东西。您的'return'语句*在'forEach'回调中。那什么都不做。 'forEach'回调针对每个元素运行,并且任何返回值都被忽略。 –

回答

3

你只是返回回调的forEach功能,如果使用过滤器,而不是,您可以返回过滤阵列,或者干脆直接

channelUserRight: function(channel, nickname){ 
    var list = userlist.filter(function(chaninfo) { 
     return chaninfo.channel === channel && chaninfo.name === nickname; 
    }); 

    return list.length ? list.shift() : null; 
} 
+1

对'.filter()'调用的赞誉。 –

+0

我怎样才能直接返回它作为[0]索引否则我需要编辑许多代码? –

+0

@ J.Doe - 编辑后只返回第一个索引(如果存在)。 – adeneo

1

第一指数在这种情况下,你需要设置在功能水平和使用一个变量来回报您的值:

function(channel, nickname){ 
    var _chaninfo; 

    userlist.forEach(function(chaninfo) { 
    if(chaninfo.channel === channel && chaninfo.name === nickname) { 
     _chaninfo = chaninfo; 
    } 
    }); 

    return _chaninfo; 
} 

的问题是,从功能块return返回用于迭代。 @ adeneo的方法与filter实际上是更清洁的,所以我建议使用它,但这是您的直接问题的“修复”。