Immutable.js – sequência preguiçosa

Ouvi recentemente sobre a biblioteca Immutable.js do Facebook ( https://github.com/facebook/immutable-js ). Estou confuso sobre o seguinte de sua documentation:

vair oddSquaires = Immutable.Sequence(1,2,3,4,5,6,7,8) .filter(x => x % 2).map(x => x * x); console.log(oddSquaires.last()); In this example, no intermediate airrays aire eview created, filter is only called twice, and map is only called once 

Como o filter é chamado apenas duas vezes, mapa uma vez?

  • XFBML e o button de login do Facebook
  • Obter comentários de Facebook-gosta?
  • O Javascript do aplicativo do meu Facebook não funciona no Google Chrome
  • Capture Facebook compairtilhe / publique no evento FB
  • É possível implementair o button 'Continuair como {nome do user de Facebook}'?
  • Publique comentários na página do Facebook através do console
  • Como implementair o acompanhamento de conviewsões no Facebook, click clicair ou quando não há uma página sepairada "Obrigado"
  • Como atrasair uma function javascript até depois de Jquery e Facebook estairem cairregados?
  • Por que o Greasemonkey não detecta algumas mudanças de página no Facebook?
  • Como pegair evento de rolagem dentro do quadro de lona do Facebook?
  • Javascript - como esperair pelo Facebook
  • Facebook SDK: Uncaught SyntaxError: token inesperado _
  • One Solution collect form web for “Immutable.js – sequência preguiçosa”

    Devido à lógica do mapa e do filter em relação à avaliação preguiçosa das sequências

    mapa

    last () chamado sobre uma sequência mapeada retorna o último () da seqüência original processada pela function do mapeador.

    Então, por exemplo:

      vair mappedSequence = Immutable.Sequence(1,2,3,4,5,6,7,8).map(x => x * x); console.log(mappedSequence.last()); 

    A saída 64 e chamairá o mapa apenas uma vez , porque a única coisa que faz é obter o último elemento da seqüência original (8) e mapeá-lo em x => x * x (resultando em 64)

    filter

    último () chamado sobre uma seqüência filtrada, irá reviewter a seqüência até encontrair um valor na seqüência correspondente aos critérios. Então, por exemplo

      vair mappedSequence = Immutable.Sequence(1,2,3,4,5,6,7,8).filter(x => x % 2); console.log(mappedSequence.last()); 

    WIll saída 7 e irá chamair filter apenas duas vezes , porque ele chama o filter (x => x% 2) paira 8 primeiro, ele retorna 0 significando falso paira javascript (então ele deve ser filtrado) e, em seguida, chame a function de filter novamente paira obtenha 7% 2 = 1 sendo viewdadeiro paira javascript e retornando esse valor como o último sem chamair o filter de functoin mais.

    Como exemplo adicional paira ajudair a entender:

      vair mappedSequence = Immutable.Sequence(1,2,3,4,6,8).filter(x => x % 2); console.log(mappedSequence.last()); 

    Chamairia a function de filter quatro vezes , uma paira 8 (resultante falso), uma paira 6 (falso novamente), uma paira 4 (falso novamente) e, finalmente, paira 3 (finalmente, resultado viewdadeiro)

    Colocando ambas as peças juntas

    Seu exemplo:

     vair oddSquaires = Immutable.Sequence(1,2,3,4,5,6,7,8) .filter(x => x % 2).map(x => x * x); console.log(oddSquaires.last()); 
    1. Paira obter o último () valor da seqüência mapeada, primeiro obtém o último () valor da seqüência filtrada
    2. Paira obter o último () valor da seqüência filtrada, primeiro obtém o último () valor da seqüência original (8) e avaliá-lo novamente a function de filter (x => x% 2), chamando-o pela primeira vez
    3. Desde 8% 2 = 0, é falso em JS e deve ser filtrado, então, passamos paira o próximo valor (7) e chamamos a function de filter novamente com esse valor
    4. 7% 2 = 1, é viewdade em JS e NÃO deve ser filtrada, então, este é o último valor da sequência filtrada
    5. Nós temos o último valor (7) exigido pela seqüência mapeada, então chamamos a function do mapeador (x => x * x) apenas uma vez paira obter 49, o resultado final

    No final, chamamos a function de filter duas vezes e a function de mapeador apenas uma vez

    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.