[英]String formatting with commas in javascript
讓我們讓用戶地址的某些部分應以單個字符串格式設置。
地址組件是
Street
City
Phone
State
Zip
並應格式化為string street city, phone, state zip
。 (2個逗號)。
問題是每個字段都可以為null
。 因此,如果street == null
和city == null
,那么我應該有phone, state zip
字串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
}
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(", ");
或者,在循環中並且沒有filter
和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(", ");
將其添加到數組中,並刪除一些相鄰的逗號和空格。
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
可以使用以下功能更清潔:
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
}
將您的字符串放入數組中,然后使用join方法並用一個來刪除多像素連續逗號
a = [address.Street,
address.City,
address.Phone,
address.State,
address.Zip].join (', ').replace (/(, ){2,}/g, ', ');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.