仅当string不为空或空时,才使用分隔符joinstring?
这感觉应该是简单的,所以对不起,如果我在这里失去了一些东西,但我试图find一个简单的方法来连接非空或非空string。
我有几个不同的地址字段:
var address; var city; var state; var zip; 这些值取决于页面中的一些表单字段和其他一些JS代码。
我想输出完整的地址在一个div,由逗号+空格分隔,所以这样的事情:
 $("#addressDiv").append(address + ", " + city + ", " + state + ", " + zip); 
问题是,这些字段中的一个或全部可能为空/空。 有没有简单的方法来join这组字段中的所有非空字段,而不需要在将每个字段添加到string之前单独检查每个字段的长度…?
考虑
 var address = "foo"; var city; var state = "bar"; var zip; text = $.grep([address, city, state, zip], Boolean).join(", "); // foo, bar 
  $.grep(stuff, Boolean)丢弃空值,未定义,空string和整数0 。 
 另一个不需要jQuery的单行解决scheme: 
 var address = "foo"; var city; var state = "bar"; var zip; text = [address, city, state, zip].filter(function (val) {return val;}).join(', '); 
  Lodash解决scheme: _.filter([address, city, state, zip]).join() 
@ aga的解决scheme非常棒,但由于JavaScript引擎中缺lessArray.prototype.filter(),所以在IE8等浏览器中不起作用。
对于那些有兴趣在广泛的浏览器(包括IE浏览器5.5 – 8),并不需要jQuery有效的解决scheme ,请参阅下面:
 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); }; 
它包括在MDN上描述的一些性能优化。
这里是一个用法示例:
 var fullAddress = join(', ', address, city, state, zip); 
尝试
 function joinIfPresent(){ return $.map(arguments, function(val){ return val && val.length > 0 ? val : undefined; }).join(', ') } $("#addressDiv").append(joinIfPresent(address, city, state, zip)); 
演示: 小提琴
 $.each([address,city,state,zip], function(i,v) { if(v){ var s = (i>0 ? ", ":"") + v; $("#addressDiv").append(s); } } );`