使用Underscore.js - 你可以_.groupBy具有多个值的键吗?

时间:2015-09-24 21:46:49

标签: javascript angularjs underscore.js

我正在尝试将具有两个可能值的组合在一起。小提示帮助http://jsfiddle.net/gJPHw/276/

这有效:

$scope.newGroup = _.groupBy($scope.data, {rankNum: '6H'});

但我想要的是:

$scope.newGroup = _.groupBy($scope.data, {rankNum: '6H' || '6Y'});

这可能吗?关于它的文档对我来说没有意义 - http://underscorejs.org/#groupBy

或者你可以通过6. substring(0,1)===' 6'

的子串来实现

甚至是下面的内容。它返回对象对象时不起作用。

$scope.newGroupH = _.groupBy($scope.data, {rankNum: '6H'});
$scope.newGroupY = _.groupBy($scope.data, {rankNum: '6Y'});
$scope.newGroupHY = $scope.newGroupH + $scope.newGroupy;

2 个答案:

答案 0 :(得分:2)

这听起来非常适合_.partition。它将一个数组分成两部分;一个数组包含满足谓词的所有项目,另一个数组包含所有不满足的内容。

var groups = _.partition(arr, function(item){
    return item.rankNum == '6H' || item.rankNum == '6Y';
})

这导致group [0]包含rankNum为6H或6Y的所有项目,以及包含所有其余项目的group [1]。

答案 1 :(得分:0)

是的,你可以在某种程度上做到这一点。但是你需要使用函数而不是对象。

$scope.newGroup = _.groupBy($scope.data, function (d) {
    return d.rankNum.substring(0,1);
});

这将按rankNum的第一个字母分组。如果你输入一个像rankNum === '6H'这样的布尔检查,它会返回一个true数组和一个false数组,因为那是你要返回的。我不确定如何用两个值进行特定分组,除非你进行布尔检查,然后对返回的true数组做一些事情。

如果您只是在寻找这两个值,那么_.filter会更好。