Nota: apenas traduzi o texto abaixo e postei aqui.
Hoje vamos recriar o método inRange()
com vanilla JS.
O que _.inRange() faz
O método lodash _.inRange()
pega um number e verifica se está entre dois outros numbers.
Você passa o number
, o start
do range e o end
do range como arguments.
_.inRange(number, start, end); // Retorna true _.inRange(2, 1, 4); // Retorna false _.inRange(2, 3, 5);
Você também pode pular o start
e passar apenas o end
. O método usará 0 como start
por padrão.
// Retorna true _.inRange(2, 4);
Se o number
for igual ao start
do range, ele passa. Se for igual ao end
, ele falha. Pessoalmente, isso me parece estranho.
// Retorna true _.inRange(2, 2, 4); // Retorna false // Porque????? _.inRange(4, 2, 4);
Tudo bem, vamos fazer isso.
Recriando _.inRange() com vanilla JS
Primeiro, vamos configurar nossa helper function.
var inRange = function (num, start, end) { // Faça as coisas... };
A seguir, vamos verificar se nosso number está no range.
Acho que o end
deve ser inclusivo, assim como o start
, então faremos as coisas de maneira um pouco diferente do que lodash faz aqui. Verificaremos se num
é maior ou igual ao start
e menor ou igual ao end
. Então, retornaremos o resultado.
var inRange = function (num, start, end) { return num >= start && num <= end; };
A versão lodash permite "drop" o start
, se desejar, e o default é 0. Vamos adicionar essa feature.
Verificaremos se end
existe. Caso contrário, atribuiremos start
como seu valor. Então, definiremos o start
como 0.
var inRange = function (num, start, end) { // Se não houver o end number, use start como end if (!end) { end = start; start = 0; } return num >= start && num <= end; };
Uma última coisa que lodash faz é "flip" os valores de start e end se o start for maior que o end
. Isso é feito para suportar valores negativos.
// Retorna false inRange(-2, -1, -4);
Neste exemplo, -1 é na verdade maior que -4, porque são números negativos. O número -2 está dentro do range, mas se os números não fossem "flipped", ele falharia.
Pessoalmente, acho que os usuários deveriam passar isso da maneira certa, então não vou apoiar essa feature.
// Retorna true inRange(-2, -4, -1);
Então, com isso, terminamos.
Fonte
Newsletter de Go Make Things
Top comments (0)