2015-12-18 22 views
0

我想将数字与数组一起拉链。看起来像这样会是最优雅的做法Lazy([...]).zip(Lazy.range(1, Infinity))。但它不会产生我期望的结果。这里是一个单元测试:Lazy.js:使用范围拉链

var assert = require('assert'); 
var Lazy = require('lazy.js'); 

describe('Lazy',() => { 
    describe('#zip()',() => { 
    it('can zip with infinite range',() => { 
     assert.deepEqual([['a', 1], ['b', 2]], 
     Lazy(['a', 'b']).zip(Lazy.range(1, Infinity)).toArray()); 
    }); 
    }); 
}); 

它失败,出现以下错误:

AssertionError: [ [ 'a', 'b' ], [ 1, 2 ] ] deepEqual [ [ 'a', undefined ], [ 'b', undefined ] ] 

回答

3

似乎Lazy.zip只接受Array参数[0] [1],和Lazy.range()产生GeneratedSequence

这似乎在为懒惰设计的图书馆中看起来有点不直观。

我想你可以做这样的事情

Lazy(arr).zip(Lazy.range(1, arr.length + 1).toArray()).toArray() 

顺便说一句,zip应该产生[['a', 1], ['b', 2]],而不是[['a', 'b'], [1, 2]],这除非我错了是你目前正在测试的。

编辑:因为无论如何你转换到一个数组,你有没有考虑只使用本地Array.map

arr.map((x, i) => [x, i + 1]); 

-

[0] http://danieltao.com/lazy.js/docs/#Sequence-zip

[1] https://github.com/dtao/lazy.js/issues/87

+0

我不知道本机地图也给你一个指标参数。谢谢! –