Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

279
Vistas
Cómo convertir la expresión RxJS triple 'of(...).pipe.map(...)' al Observable de matriz tridimensional

tengo esta expresion:

 var s2 = of(6, 16, 26).pipe( map(v1=>of(5, 15, 25).pipe( map(v2=>[v1,v2]) )), combineLatestAll()); s2.subscribe(console.log)

... y s2 es de tipo Observable<number[][]> como lo quiero.

¿Puedo convertir la siguiente expresión de manera similar a Observable<number[][][]> (en lugar de que sea un Observable<Observable<number[]>[]> ):

 var r2 = of(5, 15, 25).pipe( map(v1=>of(6, 16, 26).pipe( map(v2=>of(7, 17, 27).pipe( map(v3 => [v1,v2,v3]) )))), combineLatestAll()); //Print the output: r2.subscribe(e1 => { e1.forEach(e2 => { e2.subscribe(e3 => { console.log(e3); }); }) });

No puedo entenderlo. Cualquier ayuda apreciada.

Solución sugerida por Ruth:

 let s3: Observable<number> = of(5, 15, 25); let s4: Observable<number> = of(6, 16, 26); let s5: Observable<number> = of(7, 17, 27); const r1 = s3.pipe( map((v3: number) => s4.pipe( mergeMap((v4: number) => s5.pipe( reduce((acc: number[][], v5: number, i5: number) => { acc[i5] = [v3, v4, v5]; return acc; }, []) ) ) ) ), combineLatestAll()//reduce((acc: number[][], curr: number[][]) => [...acc, curr], []) ) r1.subscribe(console.log);
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Parece que podría usar solo el operador toArray() pero es bastante difícil entender las llamadas anidadas, así que no estoy seguro de que esto sea lo que quería :):

 var r2 = of(5, 15, 25).pipe( map(v1=>of(6, 16, 26).pipe( map(v2=>of(7, 17, 27).pipe( map(v3 => [v1,v2,v3]), toArray(), )))), combineLatestAll());

Demostración en vivo: https://stackblitz.com/edit/rxjs-veofem?devtoolsheight=60

... o si desea evitar el Observable anidado, necesitará mergeMap :

 var r2 = of(5, 15, 25).pipe( map(v1=>of(6, 16, 26).pipe( mergeMap(v2=>of(7, 17, 27).pipe( map(v3 => [v1,v2,v3]), toArray(), )))), combineLatestAll()); r2.subscribe(e1 => { e1.forEach(e2 => { console.log(e2); }) });

Demostración en vivo: https://stackblitz.com/edit/rxjs-riquzh?devtoolsheight=60

about 4 years ago · Juan Pablo Isaza Denunciar

0

algo como a continuación, su combineLatestAll() solo funciona para el mapa de primer nivel, por eso devuelve el resultado incorrecto. Prefiero controlar manualmente la ejecución de observable con mergeMap , switchMap , etc.

 of(5, 15, 25) .pipe( mergeMap((v1) => of(6, 16, 26).pipe( mergeMap((v2) => of(7, 17, 27).pipe(map((v3) => [v1, v2, v3]) )) ) ) ) .subscribe(console.log);
about 4 years ago · Juan Pablo Isaza Denunciar

0

Según su comentario, en mi opinión, este es un ejercicio relativamente difícil de aprender RxJS. Sin embargo, además de la solución proporcionada por @martin, puede intentar usar el operador reduce con concatMap para configurar manualmente la matriz.

Tenga en cuenta que reduce((acc, curr) => [...acc, curr], []) es sinónimo del operador toArray() .

 const { of } = rxjs; const { concatMap, reduce } = rxjs.operators; const jsonEditor = document.getElementById('json-editor'); const textContainer = document.getElementById('text-container'); const options = {}; const editor = new JSONEditor(jsonEditor, options); let s3 = of(5, 15, 25); let s4 = of(6, 16, 26); let s5 = of(7, 17, 27); s3.pipe( concatMap((v3) => s4.pipe( concatMap((v4) => s5.pipe( reduce((acc, v5, i5) => { acc[i5] = [v3, v4, v5]; return acc; }, []) ) ) ) ), reduce((acc, curr) => [...acc, curr], []) ).subscribe({ next: (response) => editor.set(response), error: (error) => textContainer.innerHTML = error });
 <link href="https://unpkg.com/jsoneditor@9.4.1/dist/jsoneditor.css" rel="stylesheet" type="text/css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/7.5.5/rxjs.umd.min.js"></script> <script src="https://unpkg.com/jsoneditor@9.4.1/dist/jsoneditor-minimalist.min.js"></script> <div id="json-editor" style="width: 100%; height: 100%;"></div> <span id="text-container"></span>

Actualización: Texto mecanografiado

 import { of, Observable } from 'rxjs'; import { concatMap, reduce } from 'rxjs'; let s3: Observable<number> = of(5, 15, 25); let s4: Observable<number> = of(6, 16, 26); let s5: Observable<number> = of(7, 17, 27); s3.pipe( concatMap((v3: number) => s4.pipe( concatMap((v4: number) => s5.pipe( reduce((acc: number[][], v5: number, i5: number) => { acc[i5] = [v3, v4, v5]; return acc; }, []) ) ) ) ), reduce((acc: number[][], curr: number[][]) => [...acc, curr], []) ).subscribe(console.log);

Ejemplo de trabajo: Stackblitz

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda