我想創建一個日歷,根據當前日期為我的學校檢索一個假期。目前,我將資料結構化為一個字典,其中包含了字典。
span class="hljs-keyword">const holidays = {
January: {
"小馬丁路德金日"/span>。[17] 。
},
2月: {},
March: {
"春假"。[16]
},
四月: {},
五月: {},
六月: {},
七月: {}.
"Fourth of July": [4]
},
八月: {},
September: {},
10月: {},
11月: {}.
"感恩節"。[25, 26]
},
December: {
"平安夜"。[23]。
"圣誕節"。[25]。
"寒假": [26, 27, 28, 29, 30, 31]
}
};
我目前的方法是,它將檢查月份,然后檢查陣列中的日期。如果日期存在于陣列中,它將拉出關鍵值,以顯示學校時間網頁上的假期。我已經嘗試了不同的方法來搜索子物件的陣列,但都沒有成功。
這是我的嘗試:
這是我的嘗試。
function testCase(){
for (var k in holidays) {
if (x) {
let y = holidays[x];
for (var j in y) {
if (date == y[j]) {
return a.innerHTML = Object.keys(j[x])。
} else {
return a.innerHTML = "NO FIND" 。
}
}
}
}
}
````
uj5u.com熱心網友回復:
從Date物件中獲取當前的月份名稱和日期。
你可以使用月份名稱作為索引進入holidays物件。然后你可以回圈該物件的鍵,使用includes()來測驗當前日期是否在該陣列中,并回傳假日名稱。
如果你在回圈中沒有回傳,你將在最后回傳一個默認值。
const monthNames = ["January"/span>, "二月"/span>, "三月"/span>, "四月"/span>, "五月"/span>, "六月"/span>。
"七月"/span>, "八月"/span>, "九月"/span>。"十月", "十一月", "十二月"】。]
function testCase() {
const today = new Date() 。
const curMonth = monthNames[today.getMonth()]。
const curDate = today.getDate() 。
let holidayMonth = holidays[curMonth];
for (let holidayin holidayMonth) {
if (holidays[holiday].includes(curDate)) {
return holiday。
}
}
return "No holiday found"。
uj5u.com熱心網友回復:
我想說的是,你的資料結構對于你可能需要的東西來說有點復雜,如果你能控制好這個問題,那么我建議你先把它簡化成這樣:
const holidays = [
{name: "圣誕節", startFrom: new Date("2021-12-25T00:00:00Z"), endAt: new Date("2021-12-25T23:59:59Z")}。
... //你串列中的其他日期。
]
通過這樣做,你有一個可以處理一系列日期的結構,這些日期中包含了月份。你現在只需要在一個維度上進行迭代,這應該使你的代碼更加簡單。
考慮到所有的假期并非每年都是固定的,這一點很有幫助。例如,復活節并不總是在同一天(或同一個月),通過絕對的時間范圍,您可以在您的串列中為下一年定義相同的假期。
接下來,你可以定義一個接受日期輸入的函式,并直接比較日期:
。
function FindHoliday(date) { // a Date Type input parameterreturn holidays.filter(({startFrom, endAt}) =>/span> startFrom <= date && endAt >= date)
} //回傳所有符合這個范圍的假期。
陣列過濾器函式回傳一個新的陣列,其中所有成員在給定的評估器函式中評估為真,所以如果你得到一個空的串列,就說明沒有假期存在
。從這里開始,如果你想直接寫到DOM...
。
a. innerHTML = FindHolidays(new Date("2021-12-25T12。 00:00Z"))。) map(({name}) => name).join(" ,")
uj5u.com熱心網友回復:
使用日期數字作為鍵,假日作為值來分解資料可能是一個更好的主意,這將特別有幫助,因為你可以檢查當前日期數字的鍵值,而不是回圈瀏覽每個物件鍵來查看哪些(如果有的話)包含當前日期。
另外一個重要的注意點是,普通的JS物件并不尊重和保留插入順序,所以最好使用一個物件陣列,每個月一個物件。使用物件陣列不僅尊重插入順序,而且它使用零索引(意味著第一個專案的索引為0),這也是Date .getMonth()方法的作業方式,如果當前月份是1月,該方法回傳0,如果當前月份是12月,回傳11。這也使我們能夠使用陣列輕松地定義多假日。
考慮到這一點,我們可以使用陣列來定義多假日的日子。
考慮到這一點,我們仍然可以使用JS注釋來參考月份名稱。在下面的例子中,我將日期輸入的默認值設定為圣誕節2021-12-25,并在這一天包含了圣誕節和寒假,所以你可以看到這個函式對多節日的作用。
const holidayStatus = document. getElementById('holiday-status') 。
dateInput = document.querySelector('input[type="date"]') 。
const holidays = [
{ // January
1: "New Years Day",
17: "小馬丁路德金日"。
},
{}, // February: "Martin Luther King Jr.
{ //3月16: "春假"。
},
{}, //4月: "春假" }, //4月
{}, //五月 {}, //五月
{}, //六月 {}, /六月
{} // July {}.
4: "7月4日"。
},
{}, //8月: "國慶節" }, //8月.
{}, //9月 {}, //9月
{}, //10月 {}, //10月 {}.
{}//11月 {}//11月
25: "感恩節"。
26: "感恩節"。
},
{ //12月: "感恩節"24: ["平安夜", "寒假"] 。
25: ["圣誕節", "寒假"] 。
26: "寒假"。
27: "寒假"。
28: "寒假"。
29: "寒假"。
30: "寒假"。
31: ["New Year Eve", "寒假"]
},
];
const combineStrings = strs => (strs = [].concat(strs), strs. length ==1 ? strs[0] : (strs.length ==2 ? strs.join(' and ') : strs. map((str, i) => i === strs.length - 1 ? 'and ' str : str).join(', ') )。
const getDate = () => new Date(dateInput. value ' 12:00')。)
const printHolidays = date => {
const todaysHolidays = holidays[date.getMonth()][date.getDate() ] 。
holidayStatus.textContent = todaysHolidays ? (`This day's ${typeof todaysHolidays === 'string'/span> || todaysHolidays.length === 1 ? 'holiday is' : 'holdays are'} ${combineStrings(todaysHolidays)}.`) : 'This day has no holidays.' ;
};
printHolidays(getDate()) 。
dateInput.addEventListener('change', () => {
printHolidays(getDate()) 。
});
#holiday-status {
display: inline-block;
margin-top: 5px;
padding: 5px 10px;
border: 2px solid #f00;
box-sizing: border-box;
}
<div> 使用日期。<input type="date"/span> value="2021-12-25"/span>> < /div><span id="holiday-status"> </span>
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
我添加的輔助函式combineStrings在存在陣列的情況下動態地結合多個字串,如果傳遞的是簡單的字串,則回傳傳遞的字串。
下面是幾個例子,說明不同的字串和字串陣列會回傳什么:
combineStrings("Holiday 1"/span>)
// -> "Holiday 1"。
combineStrings(["Holiday 1", "Holiday 2"] )
// -> "假日1和假日2"。
combineStrings(["Holiday 1"/span>, "Holiday 2"/span>, "Holiday 3"/span>] )
// -> "假日1,假日2,和假日3"。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311634.html
標籤:
上一篇:如何獲得O/P作為{"欽奈":["Ram","Stephen"],"Mumbai":"Laxman"
下一篇:讀取檔案時允許月度格式的變化
