在javascript中用逗号格式化字符串

Ily*_*lya 1 javascript string formatting

让我们将用户地址的一部分设置为单个字符串。
地址组件是

Street  
City  
Phone  
State  
Zip  
Run Code Online (Sandbox Code Playgroud)

并且应该格式化为 string street city, phone, state zip。(2 个逗号)。
问题是每个字段都可以null。所以如果street == nullcity == null,那么我应该有字符串phone, state zip(1个逗号)。问题在于控制空格数和逗号数
如何避免和最小化空检查的数量?
我目前的代码是

  var formatAddress = function(address) {
     var retVal = ""

     if (address.street || address.city)
     {
        retVal += address.street ? address.street + " " : "" 
        retVal += address.city ? address.city : "" 
        retVal += ", ";
     }
     retVal += address.phone ? address.phone + ", " : ""

     retVal += address.state ? address.state : ""
     retVal += address.zip ? " " + address.zip : ""  

     return retVal
  }
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 5

var fields = [[address.street, address.city], [address.phone], [address.state, address.zip]];
return fields.map(function(part) {
    return part.filter(Boolean).join(" ");
}).filter(function(str) { return str.length; }).join(", ");
Run Code Online (Sandbox Code Playgroud)

或者,在没有filterand的循环中map,但将属性名称映射到它们的值:

var fields = [["street", "city"], ["phone"], ["state", "zip"]];
for (var strs=[], i=0; i<fields.length; i++) {
    for (var parts=[], j=0; j<fields[i].length; j++)
        if (address[fields[i][j]])
            parts.push(address[fields[i][j]]);
    if (parts.length)
        strs.push(parts.join(" "));
}
return strs.join(", ");
Run Code Online (Sandbox Code Playgroud)