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

209
Visualizações
Creación de una alternativa iterable al método filter() de las matrices de JavaScript

Soy un principiante leyendo el capítulo Iteradores del libro.

JavaScript: la guía definitiva

No puedo entender el método next() en el siguiente ejemplo del libro que trata sobre la creación de una alternativa iterable al método filter() de las matrices de JavaScript.

 // Return an iterable object that filters the specified iterable, // iterating only those elements for which the predicate returns true function filter(iterable, predicate) { let iterator = iterable[Symbol.iterator](); return { // This object is both iterator and iterable [Symbol.iterator]() { return this; }, next() { for(;;) { let v = iterator.next(); if(v.done || predicate(v.value)) { return v; } } } }; }

Probemos esta función con una matriz.

 let a = [1,2,3,4,5] let iter = filter(a, x => x>3) // Call the function // Lets check the returned object of iter.next() method iter.next() // {value: 4, done: false} iter.next() // {value: 5, done: false} iter.next() // {value: undefined, done: true}

Estoy completamente confundido acerca del método next() aquí. Por favor, ayúdame a entenderlo.

Además, no puedo entender que... el método next() contiene un bucle for infinito. Pero lo que hace es romper ese bucle. No hay condición como esa aquí.

Gracias de antemano

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Además, no puedo entender que... el método next() contiene un bucle for infinito. Pero lo que hace es romper ese bucle. No hay condición como esa aquí.

el return rompe el bucle.

Estoy completamente confundido acerca del método next() aquí. Por favor, ayúdame a entenderlo.

Esto es lo que está haciendo:

  1. Llama a next para obtener el siguiente objeto de resultado, que almacena en v .
  2. Si v.done es veraz, devuelve v (interrumpiendo el ciclo). Esto significa que el iterador ha llegado al final de su secuencia.
  3. Si v.done es falso, llama al predicate que pasa en v.value ; si el predicate devuelve un valor verdadero, next devuelve v (interrumpiendo el bucle).

Entonces, el resultado es que el iterador devuelto por esa función de filter iterará los valores para los que el predicado devuelve un valor verdadero, y devolverá un objeto de resultado con done establecido en un valor verdadero cuando llegue al final de la entrada interable.


No he leído las ediciones recientes del libro (compré el mío hace unos 15 años), pero supongo que el código dado está destinado a mostrar cómo usaría un iterador explícitamente, y luego Flanagan presentará for-of y funciones de generador, que proporcionan un medio más simple de hacer ese filter :

 function* filter(iterable, predicate) { for (const element of iterable) { if (predicate(element)) { yield element; } } }

Ejemplo en vivo:

 function* filter(iterable, predicate) { for (const element of iterable) { if (predicate(element)) { yield element; } } } let a = [1,2,3,4,5]; let iter = filter(a, x => x>3); // Call the function // Lets check the returned object of iter.next() method console.log(iter.next()); // {value: 4, done: false} console.log(iter.next()); // {value: 5, done: false} console.log(iter.next()); // {value: undefined, done: true}

Fui de un lado a otro entre implícitos ( for-of , generadores) y explícitos en el capítulo 6 de mi reciente libro JavaScript: The New Toys . Descubrí que intercalarlos era lo mejor que podía hacer para ayudar a transmitir los conceptos pero también los detalles.

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