[英]Javascript days output to range format?
我有一個javascript對象,其中包含一周中的某幾天以及是否選擇了true/false
值。
然后,我將此對象傳遞給一個函數,在該函數中,我需要以一種特定的方式格式化日期並返回它。
本質上,如果在第二天也是如此,那么它將顯示那些選定的日期,例如MF
。 假設所選的日期是M, T, F
則輸出將是MT, F
這是我嘗試設置此方法的示例:
// Define our selected days
var days = {
sunday: true,
monday: false,
tuesday: false,
wednesday: true,
thursday: true,
friday: false,
saturday: false
};
// Format our dates
function formatDates(days) {
// Logic Here
return days;
}
console.log(formatDates(days));
// Scenarios
/* Input
1: Checked: Su, W, Th
2: Checked: Su, M, T, Sa
3: Checked: M, T, Th, Sa
4: Checked: T, Th, Sa, Sun
/*
/*
Output
1: Su, W, Th
2: Sa - T
3: M - T, Th, Sa
4: Sa - Su, T, Th
/*
這是上面代碼的小提琴: https : //jsfiddle.net/ghs3Lthj/1
問題:是否有任何我應該知道的日期函數可以處理這樣的范圍,或者是否需要自定義?
只是不確定是否存在任何可以說“這些天以范圍樣式顯示給我看”的內容。
由於對象中的屬性沒有確定的順序,因此最好在您的日子中使用數組。 當順序很重要時,數組是合適的。
另外,您將需要定義每天的縮寫。
所以我建議這種結構:
var days = [
{ name: "sunday", abbrev: "Su", selected: true },
{ name: "monday", abbrev: "M", selected: false },
{ name: "tuesday", abbrev: "Tu", selected: false },
{ name: "wednesday", abbrev: "W", selected: true },
{ name: "thursday", abbrev: "Th", selected: true },
{ name: "friday", abbrev: "F", selected: false },
{ name: "saturday", abbrev: "Sa", selected: false }
];
然后,我將為所有選定的日期創建一個簡單的逗號分隔的字符串,然后使用字符串替換來獲得所需的格式:
function formatDates(days) { return days.map( day => day.selected ? day.abbrev : "" ) .join(", ") .replace(/(\\w+)(?:, \\w+)*, (\\w+)/g, "$1 - $2") // insert hyphen were appropriate .replace(/^(, )+|, (?=,|$)/g, "") // remove commas we don't need } var days = [ { name: "sunday", abbrev: "Su", selected: true }, { name: "monday", abbrev: "M", selected: false }, { name: "tuesday", abbrev: "Tu", selected: false }, { name: "wednesday", abbrev: "W", selected: true }, { name: "thursday", abbrev: "Th", selected: true }, { name: "friday", abbrev: "F", selected: false }, { name: "saturday", abbrev: "Sa", selected: false } ]; console.log(formatDates(days));
注意:即使使用逗號,連續兩天也會顯示連字符。 如果在這種情況下更喜歡逗號,請用+
替換第一個正則表達式中的*
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.