1

単一の文字列でフォーマットする必要があるユーザーのアドレスの一部を見てみましょう。
住所コンポーネントは

Street  
City  
Phone  
State  
Zip  

string にフォーマットする必要がありますstreet city, phone, state zip。(2 つのコンマ)。
問題は、すべてのフィールドが になる可能性があることnullです。したがって、 の場合street == nullcity == null文字列phone, state zip(1 つのコンマ) が必要です。問題は、スペースの数とコンマの数を制御する
ことです。null 検査の数を回避して最小限に抑えるにはどうすればよいですか?
私の現在のコードは

  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
  }
4

4 に答える 4

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(", ");

または、ループ内で and を使用せずfiltermap、プロパティ名をその値にマッピングします。

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(", ");
于 2012-10-25T14:43:13.037 に答える
1

add it to an array and remove some adjacent comma's and spaces.

var street = "street";
var city = "city";
var phone = "phone";
var state = "state";
var zip = "zip";
[
    street,
    city, ",",
    phone, ",",
    state,
    zip
].join(" ") //add all items with spaces in between
.replace(/(\s*,\s*)+/g, ", ") //remove multiple spaces before or after commas
.replace(/\s+/g, " "); //remove any other double spaces
于 2012-10-25T14:38:46.130 に答える
0

文字列を配列に入れてから、join メソッドを使用し、複数の連続したコンマを 1 つのコンマで削除します

a = [address.Street, 
     address.City, 
     address.Phone, 
     address.State, 
     address.Zip].join (', ').replace (/(, ){2,}/g, ', ');
于 2012-10-25T15:09:35.107 に答える
0

関数を使用すると、よりクリーンになる可能性があります。

function formatAddressPart(part,concatString){
     return part ? part+concatString : "";
}


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

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

     retVal += formatAddressPart(address.state," ");
     retVal += formatAddressPart(address.zip,"");  

     return retVal
  }
于 2012-10-25T14:37:15.323 に答える