在我的下划线函数中过滤掉数组?

Filter out for arrays in my function in underscore?

如果profile.team_member_designations 是一个数组,运行s 下面的代码。我想添加一个条件来过滤或检查 profile_member_designations 是否是一个数组,因为如果它是一个字符串,我不希望代码为 运行。本质上,就在 map 函数之前,我想通过代码过滤掉仅 [=​​17=] 的数组。我该怎么做?

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;
    };

替换if条件如下:

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

解决方案

使用 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 returns 当参数为数组时为真。它也有很好的browser support

如果我没有正确理解你的问题,你想要这样的东西。

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;
};