在链中使用zip

时间:2014-03-12 19:14:58

标签: underscore.js

是否可以链接zip来转置数组数组?

var data = _(raw)
  .map(function(d) { return d.events; })
  .zip()  // how do I do this step?
  .map(function(d) { 
    return {
      time: d[0].time,
      total: _.reduce(d, function(total, event) { return total += event.amount; })
    };
  });

The docs展示如何转置数组,但不作为链的一部分:

_.zip.apply(_, arrayOfRowsOfData);

2 个答案:

答案 0 :(得分:3)

你可以添加一个mixin并在你的链中调用它:

_.mixin( { zipMeUp: function(arrays){
    return _.zip.apply(_, arrays);
}});

var result = _.chain(data)
    .zipMeUp()
    .value();

答案 1 :(得分:2)

您可能想要在输入为列表列表的链中尝试unzip。我们几乎最终写了一个mixin,但后来读了similar issue

JSON.stringify(_([['john', 'jill'], [20, 40]]).zip().value())
=> "[[["john","jill"]],[[20,40]]]"
JSON.stringify(_([['john', 'jill'], [20, 40]]).unzip().value())
=> "[["john",20],["jill",40]]"