Resolvendo o problema data com o paradigma funcional

O primeiro passo é transformar a data que lemos do campo do formulário em um array, onde cada elemento equivale aos números na sequência em que são apresentados. Para isso, podemos usar a função split, presente em todas as strings. A função recebe como parâmetro o critério de separação, em nosso caso o hífen:

Se digitarmos 11/10/2015, teremos o array ['11', '10', '2015']. Excelente, contudo precisamos fazer com que o elemento da segunda posição seja decrementado. Para isso, criaremos um novo array, com a diferença de que esse novo array terá o elemento da segunda posição decrementado de um, tudo através da função map, presente em todos os arrays:

 

Do jeito que está, a função map itera sobre os itens do nosso array criado com split e retorna cada elemento, resultando no final é um array idêntico ao que estamos iterando. Não queremos isso, queremos realizar um decremento para o mês, que é a segunda posição do array, e acessado através do índice 1.

A função map recebe como segundo parâmetro o índice, ou seja, a posição do elemento que está iterando. Sabemos que nosso array terá sempre três posições, que equivalem aos índices 0, 1 e 2. Precisamos retornar o item decrementado apenas para o índice 1. Podemos fazer uma cláusula if e testar se a posição é 1, mas no lugar disso escreveremos um código mais enxuto. Vamos subtrair o item do array pelo resto da divisão por dois do seu índice, ou seja, queremos subtrair o módulo do índice. O módulo da divisão por 2 do índice 1 é 0, do índice 1 é 1 e do índice 2 é 0:

Veja que não precisamos converter cada item da nossa lista em um número para realizar a subtração. Quando temos uma subtração, multiplicação e divisão envolvendo strings, o JavaScript realizará uma conversão implícita de string para Number. Ele só não faz isso com a soma, porque podemos estar somando ou realizando uma concatenação. É claro, se a string que o JavaScript tentar converter não for um número, ocorrerá um erro.

Então, temos um array de números agora, sendo assim, podemos pegar cada posição do Array e passar para o construtor da nossa data:

 

 

Deixe seu comentário:

Your email address will not be published. Required fields are marked *

*