2015-12-18 24 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

我不知道本機地圖也給你一個指標參數。謝謝! –