我有一個星期天的名稱作爲鍵的對象,其值是一個對象數組,其中包含有關不同班次中的開始和結束時間的信息。爲什麼我在以下JavaScript操作中獲得重複值?
let openingTimes =
{
sunday: [
{ id: 1, shift: 'morning', opening_time: '07:00', closing_time: '11:00' },
{ id: 1, shift: 'day', opening_time: '13:30', closing_time: '16:30' },
{ id: 1, shift: 'night', opening_time: '20:00', closing_time: '23:00' }
],
monday: [
{ id: 1, shift: 'day', opening_time: '13:30', closing_time: '16:30' }
],
wednesday: [
{ id: 1, shift: 'morning', opening_time: '07:00', closing_time: '12:00' },
{ id: 1, shift: 'night', opening_time: '20:00', closing_time: '23:00' }
],
thursday: [
{ id: 1, shift: 'morning', opening_time: '07:00', closing_time: '12:00' },
{ id: 1, shift: 'night', opening_time: '20:00', closing_time: '23:00' }
],
friday: [
{ id: 1, shift: 'day', opening_time: '13:30', closing_time: '16:30' },
{ id: 1, shift: 'night', opening_time: '20:00', closing_time: '23:00' }
],
};
我想在JSON數據做一個小的改變。對於天的名稱的值,我試圖添加鍵的變化的對象,值是從開始時間到結束時間的時間數組,它們之間的差異爲15分鐘。
雖然我在建築名單並取得成功,我無法弄清楚,爲什麼我得到了確切的日子相同的值。我在某處錯過了一些簡單的東西。
這裏是我的代碼。
let Object1 = {};
let Object2 = {};
for (let key in openingTimes)
{
openingTimes[key].forEach(item =>
{
/* Separate opening time to parts by colon */
let oParts = item.opening_time.split(':');
let oHour = oParts[0];
let oMins = oParts[1];
/* Separate closing time to parts by colon */
let cParts = item.closing_time.split(':');
let cHour = cParts[0];
let cMins = cParts[1];
Object1[item.shift] = buildTimeArray(oHour, oMins, cHour, cMins, 15);
Object2[key] = Object1;
});
}
console.log(Object2);
/**
* Gather restaurant hours and return the array of available delivery times in difference of specified minutes
* @params Opening Hour, Opening Minutes, Closing Hour, Closing Minutes, Miutes Interval
*/
function buildTimeArray(oHour, oMins, cHour, cMins, interval_mins)
{
let result = [];
let start = new Date('','','',oHour, oMins);
let end = new Date('','','',cHour, cMins);
for (let d = start; d <= end; d.setMinutes(d.getMinutes() + interval_mins))
{
result.push(this.meridianTime(d));
}
return result;
}
/**
* Build time in 12 hrs AM/PM format
*/
function meridianTime(inputDate)
{
let hours = inputDate.getHours();
let minutes = inputDate.getMinutes();
let ampm = hours < 12 ? "AM" : (hours = hours % 12, "PM");
hours = hours === 0 ? 12 : hours < 10? ("0" + hours) : hours;
minutes = minutes < 10 ? ("0" + minutes) : minutes;
return hours + ":" + minutes + " " + ampm;
}
初始化'Object1'到'{}'作爲'爲(讓關鍵的第一條語句...'循環。 –
另外,考慮使用日期時庫(如Date.js)將所有分割/三元操作減少爲幾個簡單的分析和toStrings。 – Extragorey
好的信息,謝謝。 – anonym