【问题标题】:Filter out for arrays in my function in underscore?用下划线过滤掉我的函数中的数组?
【发布时间】:2016-12-02 02:04:54
【问题描述】:

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

【问题讨论】:

  • 您的代码中没有profile.team_member_designations。但最简单的方法是使用typeof 运算符:stackoverflow.com/q/6286542/215552
  • if (profile.team_members && Array.isArray(profile.team_members.team_member_designations)) { ...

标签: javascript underscore.js


【解决方案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;
};

【讨论】:

【解决方案2】:

解决方案

使用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

【讨论】:

    【解决方案3】:

    替换if条件如下:

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

    【讨论】:

      猜你喜欢
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      相关资源
      最近更新 更多