2016-07-27 60 views
0

如果profile.team_member_designations是一个数组,则运行下面的代码。我想添加一个条件来过滤或检查profile_member_designations是否是一个数组,因为如果它是一个字符串,我不希望代码运行。实质上,就在map函数之前,我想过滤出仅用于通过代码运行的数组。我该怎么做呢?在我的函数中用下划线过滤数组?

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