簡體   English   中英

Javascript天輸出為范圍格式?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM