2016-07-12 7 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

あなたはちょうどあなたの代わりにフィルタを使用する場合は、フィルター配列、またはあなたが設定する必要があります。このような状況で直接

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

ちょうど最初のインデックスを返すことができ、forEach機能のためのコールバックに戻っていますあなたの値を返す関数レベルと使用時の変数は:

function(channel, nickname){ 
    var _chaninfo; 

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

    return _chaninfo; 
} 

問題は、機能ブロックからreturnリターンを反復するために使用されているものです。 filterの@ adeneoのアプローチは実際にはより洗練されているので、これを使用することをお勧めしますが、これはあなたの直面する問題の「修正」です。

関連する問題