Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

282
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda