Tengo una tarea para crear un iterador de cuenta regresiva que cuente de a a b. Por ejemplo:
console.log([...countdown(10, 1)]); // [10,9,8,7,6,5,4,3,2,1] const counter = countdown(5,2); console.log(counter.next()); // {value: 5, done: false};Y tengo las siguientes unidades de prueba:
describe('countdown', () => { it('should return [10,9,8,7,6,5,4,3,2,1] for given input (10, 1)', () => { assert.deepStrictEqual([...countdown(10, 1)], [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]); }); it('should return [5,4,3,2,1,0] for given input (5, 0)', () => { assert.deepStrictEqual([...countdown(5, 0)], [5, 4, 3, 2, 1, 0]); }); it('should return [15,14,13,12,11,10] for given input (15, 10)', () => { assert.deepStrictEqual([...countdown(15, 10)], [15, 14, 13, 12, 11, 10]); }); it('should return {value: 3, done: false} for given input (3, 0)', () => { assert.deepStrictEqual(countdown(3, 0).next(), {value: 3, done: false}); }); });Creé el iterador de esta manera:
function countdown(a:number, b:number) { let arr = []; while(a>=b){ arr.push(a--) } // const next = () =>{ // } return arr }Pasa las pruebas unitarias, pero el problema es, ¿cómo crear .next() como en el ejemplo y mostrar ese objeto con el valor inicial y listo? ¡Gracias por adelantado! soy nuevo en mecanografiado y no se como hacerlo
Estás buscando una función generadora :
function* countdown(a:number, b:number) { while(a>=b){ yield a--; } } console.log([...countdown(10, 1)]);