2015-12-18 4 views
0

Я хотел бы связать граф с массивом. Кажется, что это будет самый элегантный способ сделать это. Lazy([...]).zip(Lazy.range(1, Infinity)). Но это не дает ожидаемого результата. Вот тестовый модуль:Lazy.js: zipping с диапазоном

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

Я не знал родную карту и дал вам параметр индекса. Благодаря! –