sobre sacerdote reflexion para oración oracion mas las enviar dios cuidado con compartir carta cadenas javascript string

javascript - sacerdote - no a las cadenas de whatsapp



Unir cadenas con un delimitador solo si las cadenas no son nulas o están vacías (7)

Considerar

var address = "foo"; var city; var state = "bar"; var zip; text = $.grep([address, city, state, zip], Boolean).join(", "); // foo, bar

$.grep(stuff, Boolean) descarta nulos, indefinidos, cadenas vacías y enteros 0 ''s.

En vainilla JS,

var address = "foo"; var city; var state = "bar"; var zip; text = [address, city, state, zip].filter(Boolean).join(", "); console.log(text)

Esto parece que debería ser simple, lo siento mucho si me falta algo aquí, pero estoy tratando de encontrar una manera sencilla de concatenar solo cadenas no nulas o no vacías.

Tengo varios campos de dirección distintos:

var address; var city; var state; var zip;

Los valores para estos se establecen en función de algunos campos de formulario en la página y algún otro código js.

Quiero enviar la dirección completa en un div , delimitado por comas + espacio, así que algo como esto:

$("#addressDiv").append(address + ", " + city + ", " + state + ", " + zip);

El problema es que uno o todos estos campos podrían estar nulos / vacíos.

¿Hay alguna forma sencilla de unir todos los campos no vacíos en este grupo de campos, sin hacer una verificación de la longitud de cada uno individualmente antes de agregarlo a la cadena?


Otra solución de una línea, que no requiere jQuery :

var address = "foo"; var city; var state = "bar"; var zip; text = [address, city, state, zip].filter(function (val) {return val;}).join('', '');


Sólo:

[address, city, state, zip].filter(Boolean).join('', '');


Solución de Lodash : _.filter([address, city, state, zip]).join()


Tratar

function joinIfPresent(){ return $.map(arguments, function(val){ return val && val.length > 0 ? val : undefined; }).join('', '') } $("#addressDiv").append(joinIfPresent(address, city, state, zip));

Demo: Fiddle


La solución de @aga es excelente, pero no funciona en navegadores más antiguos como IE8 debido a la falta de Array.prototype.filter() en sus motores de JavaScript.

Para aquellos que estén interesados ​​en una solución eficiente que funcione en una amplia gama de navegadores (incluido IE 5.5 - 8) y que no requiera jQuery , consulte a continuación:

var join = function (separator /*, strings */) { // Do not use: // var args = Array.prototype.slice.call(arguments, 1); // since it prevents optimizations in JavaScript engines (V8 for example). // (See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments) // So we construct a new array by iterating through the arguments object var argsLength = arguments.length, strings = []; // Iterate through the arguments object skipping separator arg for (var i = 1, j = 0; i < argsLength; ++i) { var arg = arguments[i]; // Filter undefineds, nulls, empty strings, 0s if (arg) { strings[j++] = arg; } } return strings.join(separator); };

Incluye algunas optimizaciones de rendimiento descritas en MDN here .

Y aquí hay un ejemplo de uso:

var fullAddress = join('', '', address, city, state, zip);


$.each([address,city,state,zip], function(i,v) { if(v){ var s = (i>0 ? ", ":"") + v; $("#addressDiv").append(s); } } );`