2016-07-27 4 views
0

profile.team_member_designationsが配列の場合、以下のコードが実行されます。フィルタリングする条件を追加したい、あるいはprofile_member_designationsが配列であるかどうかをチェックしたいのです。なぜなら、文字列ならコードを実行したくないからです。基本的には、マップ関数の直前で、コードを実行するための配列だけを除外したいと考えています。これはどうすればいいですか?私の関数内の配列をアンダースコアでフィルタリングしますか?

JS

var getTeamDesignations = function(profile) { 
     //Designations for a single team member                           
     var teamDesignations = []; 
     if (profile.team_members) { 
      teamDesignations = _.chain(profile.team_members) 
       .map(_.property('team_member_designations')) 
       .flatten() 
       .uniq() 
       .value(); 
     } 
     return teamDesignations; 
    }; 
+0

コードには「profile.team_member_designations」はありません。しかし、最も簡単な方法は 'typeof'演算子を使うことです:http://stackoverflow.com/q/6286542/215552 –

+0

' if(profile.team_members && Array.isArray(profile.team_members.team_member_designations)){... ' – adeneo

答えて

1

私はあなたの質問を正しく理解している場合、このようなものが欲しいです。

var getTeamDesignations = function(profile) { 
    //Designations for a single team member                           
    var teamDesignations = []; 
    if (profile.team_members) { 
     teamDesignations = _.chain(profile.team_members) 
      .filter(_.compose(_.isArray, _.property('team_member_designations'))) 
      .map(_.property('team_member_designations')) 
      .flatten() 
      .uniq() 
      .value(); 
    } 
    return teamDesignations; 
}; 
+0

これは、うまくいった! _.composeがフィルタメソッドと一緒に必要な理由を説明できますか? –

+0

それはのように書かれている可能性: '.filter(TM => _.isArray(tm.team_member_designations)' アンダードキュメントは、各関数がリターンを消費関数のリストの[組成物として_.compose説明します(http://underscorejs.org/#compose)これは 'g(f())'またはこの場合は '_.isArray(_。property( ') 'team_member_designations ')(team_member))' TLDR - 私は_.composeを使用して_.filterに渡す述語関数を作成しています。 –

0

条件ならば、次のように置き換えます。

if (profile.team_members && (profile.team_members instanceof Array)){ 
0

を解決

Array.isArrayを使用してください。

var getTeamDesignations = function(profile) { 
     //Designations for a single team member                           
     var teamDesignations = []; 
     if (profile.team_members && Array.isArray(profile.team_members)) { 
      teamDesignations = _.chain(profile.team_members) 
       .map(_.property('team_member_designations')) 
       .flatten() 
       .uniq() 
       .value(); 
     } 
     return teamDesignations; 
    }; 

Array.isArrayは、パラメータが配列の場合にtrueを返します。それは良いbrowser support同様良いです。

関連する問題