如何使其更具功能性?

时间:2015-04-22 21:32:39

标签: javascript underscore.js

尝试使用下划线库编写更多功能性javascript。关于如何改进这个功能而不是命令式的任何想法?

每对中的第一个是"桶"第二个是值,我想迭代信息并得到每个桶中的唯一列表。

var a = [
  ['A',1],
  ['A',1],
  ['A',1],
  ['A',2],
  ['B',1],
  ['B',2],
  ['B',2],
  ['B',4],
  ['C',6],
  ['D',5]
];

//result should be:
//  {
//     A: [1,2],
//     B: [1,2,4],
//     C: [6],
//     D: [5]
//  }

_.chain(a)
 .groupBy(function (pair) {
    var group = pair[0];
    return group;
 })
 .mapObject(function (val, key) {
    var results = _.chain(val)
                   .map(function (pair) {
                     return pair[1]
                   })
                   .uniq()
                   .value();
    return results;
 })
 .value();

2 个答案:

答案 0 :(得分:2)

_.reduce(a, function(memo, pair){
  var key = pair[0], value = pair[1];
  var bucket = memo[key] = memo[key] || [];
  if (!_.contains(bucket, value)) bucket.push(value);
  return memo;
}, {});

答案 1 :(得分:2)

这样的事情怎么样:

var groups = _.groupBy(a, '0');

var result = _.mapObject(groups, function(group){
    return _.uniq(_.pluck(group, '1'));
});