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)