Parece que deveria ser simples, desculpe se estou perdendo algo aqui, mas estou tentando encontrar uma maneira simples de concatenar apenas strings não nulas ou não vazias.
Tenho vários campos de endereço distintos:
var address;
var city;
var state;
var zip;
Os valores para esses são definidos com base em alguns campos de formulário na página e em algum outro código js.
Quero produzir o endereço completo em a div
, delimitado por vírgula + espaço, algo assim:
$("#addressDiv").append(address + ", " + city + ", " + state + ", " + zip);
O problema é que um ou todos esses campos podem ser nulos / vazios.
Existe alguma maneira simples de juntar todos os campos não vazios neste grupo de campos, sem fazer uma verificação do comprimento de cada um individualmente antes de adicioná-lo à string?
javascript
string
Froadie
fonte
fonte
Respostas:
Considerar
.filter(Boolean)
(que é o mesmo que.filter(x => x)
) remove todos os valores "falsos" (nulos, indefinidos, strings vazias, etc.). Se a sua definição de "vazio" for diferente, você terá que fornecê-la, por exemplo:irá manter apenas strings não vazias na lista.
-
(resposta obsoleta do jquery)
fonte
Mais uma solução de uma linha, que não requer
jQuery
:fonte
[address, city, state, zip].filter(val => val).join(', ')
Solução Lodash :
_.filter([address, city, state, zip]).join()
fonte
Somente:
fonte
A solução de @aga é ótima, mas não funciona em navegadores mais antigos como o IE8 devido à falta de Array.prototype.filter () em seus mecanismos JavaScript.
Para aqueles que estão interessados em uma solução eficiente trabalhando em uma ampla gama de navegadores (incluindo IE 5.5 - 8) e que não requer jQuery , veja abaixo:
Inclui algumas otimizações de desempenho descritas no MDN aqui .
E aqui está um exemplo de uso:
fonte
Experimentar
Demo: Fiddle
fonte
fonte