Freecodecamp: Bonfire: Falsy Bouncer - instruções contraditórias

Criado em 15 dez. 2015  ·  3Comentários  ·  Fonte: freeCodeCamp/freeCodeCamp

Challenge Bonfire: Falsy Bouncer tem um problema.
O agente do usuário é: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36 .

As instruções para Falsy Bouncer indicam que um valor Falsy é de vários tipos, incluindo NaN .
O primeiro teste requer que o bouncer de chamada de função [7, "ate", 9]
no entanto, observe que a string "ate" é NaN, portanto, não deve ser incluída na matriz resultante.

Portanto, parece que não há como passar no teste 1 e no teste 3 com o mesmo bloco de código, pois são respostas mutuamente exclusivas.

Meu código:

function bouncer(arr) {

  arr = arr.filter(function(val){
    if (val === false || val === null || val === undefined || val === "" || val === 0 || isNaN(val)) return false;
    return true;
  });

  return arr;
}

bouncer([false, null, 0, NaN, undefined, ""]);

Comentários muito úteis

E, tecnicamente, você pode usar a função Boolean para fazer isso por você, então o problema pode ser resolvido:
return arr.filter(Boolean) , uma vez que o booleano pega valores verdadeiros / falsos e retorna verdadeiro ou falso.

Todos 3 comentários

Peço desculpas antecipadamente se eu não entendi algo aqui.

NaN é um valor real que uma variável pode ter e é falsey. "ate" não é um número e isNan("ate") retornará verdadeiro, mas o valor "ate" não é falsey, apenas o valor específico de NaN é falsey. A beleza (e fonte de bug ocasional) dos valores falsey é que você não precisa procurá-los explicitamente como o seu código faz, porque sempre que um valor booleano é necessário, o tipo Javascript os força a um valor booleano false. Isso significa que o código para a função de filtro pode ser simplesmente este:

arr = arr.filter(function(val){
  return val;
});

Obrigado e feliz codificação!

E, tecnicamente, você pode usar a função Boolean para fazer isso por você, então o problema pode ser resolvido:
return arr.filter(Boolean) , uma vez que o booleano pega valores verdadeiros / falsos e retorna verdadeiro ou falso.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

ROWn1ne picture ROWn1ne  ·  3Comentários

raisedadead picture raisedadead  ·  3Comentários

MichaelLeeHobbs picture MichaelLeeHobbs  ·  3Comentários

robwelan picture robwelan  ·  3Comentários

trashtalka3000 picture trashtalka3000  ·  3Comentários