2014-03-12 43 views
1

是否可以鏈接zip轉置數組數組?在鏈中使用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); 

回答

3

您可以添加一個mixin並調用你的內鏈:

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

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

這很好用,不知道'.mixin'。謝謝! –

2

你可能想嘗試unzip而不是鏈接,其中輸入是列表的列表。我們幾乎最終寫了一個mixin,但後來讀到https://github.com/lodash/lodash/issues/965

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