Эй, все это массив, который у меня есть:
var thisDayDate = today.getDate();
var JANDays = [{day:16, timeStart:"23:00:00", timeEnd:"23:59:59"}, //It's Jan 16th Friday 11pm to
{day:17, timeStart:"00:00:00", timeEnd:"11:00:00"}, //It's Jan 17th Sat 11am
{day:22, timeStart:"23:00:00", timeEnd:"23:59:59"}, //It's Jan 22nd Friday 11pm to
{day:23, timeStart:"00:00:00", timeEnd:"07:00:00"}]; //It's Jan 23ed Sat 7am
for(var i = 0; i < JANDays.length; i++)
{
if (thisDayDate == [JANDays[i].day]) {
if (isSiteDown(JANDays[i].timeStart,JANDays[i].timeEnd)) {
showThePage();
} else {
console.log('nope');
}
}
}
Моя проблема в том, что я хочу сделать это только для массива:
var JANDays = [{day:16, timeStart:"23:00:00"}, //It's Jan 16th Friday 11pm to
{day:17, timeEnd:"11:00:00"}, //It's Jan 17th Sat 11am
{day:22, timeStart:"23:00:00"}, //It's Jan 22nd Friday 11pm to
{day:23, timeEnd:"07:00:00"}]; //It's Jan 23ed Sat 7am
В приведенном выше коде я хочу иметь timeStart для первого дня и timeEnd для второго дня и т. Д. И т. Д.
timeEnd для 1-го дня должно быть статическим в 23:59:59 .
timeStart для 2-го дня должно быть статическим в 00:00:00 .
Я не уверен, как это сделать в цикле операторов IF, поэтому помощь будет принята.
3 ответа
Если я правильно понимаю ... Вы хотите использовать следующий массив:
var JANDays = [{day:16, timeStart:"23:00:00"},
{day:17, timeEnd:"11:00:00"},
{day:22, timeStart:"23:00:00"},
{day:23, timeEnd:"07:00:00"}];
Вместо того, который у вас есть.
В этом случае вы можете увеличить индекс i
, чтобы получить следующий элемент в массиве, например:
var JANDays = [{day:16, timeStart:"23:00:00"},
{day:17, timeEnd:"11:00:00"},
{day:22, timeStart:"23:00:00"},
{day:23, timeEnd:"07:00:00"}];
for (var i = 0; i < JANDays.length; i++)
{
if (thisDayDate == JANDays[i].day) {
// Notice "JANDays[i+1].timeEnd", this will get the timeEnd of the next item in the array
// (Beware: i+1 could result in undefined)
if (isSiteDown(JANDays[i].timeStart, JANDays[i+1].timeEnd)) {
showThePage();
} else {
console.log('nope');
}
}
}
РЕДАКТИРОВАТЬ
Я до сих пор не до конца понимаю, что вы ищете, но, возможно, посмотрите на это на секунду:
var JANDays = [{day:16, timeStart:"23:00:00"},
{day:17, timeEnd:"11:00:00"},
{day:22, timeStart:"23:00:00"},
{day:23, timeEnd:"07:00:00"}];
for (var i = 0; i < JANDays.length; i++)
{
var day = JANDays[i].day;
var timeStart = JANDays[i] && JANDays[i].timeStart || "00:00:00";
var timeEnd = JANDays[i] && JANDays[i].timeEnd;
var nextTimeEnd = JANDays[i+1] && JANDays[i+1].timeEnd || "23:59:59";
if (timeEnd) { // This indicates the second day
console.log(day, timeStart, timeEnd);
} else {
console.log(day, timeStart, nextTimeEnd);
}
}
Выше будет выводить на консоль что-то вроде:
16 "23:00:00" "11:00:00"
17 "00:00:00" "11:00:00"
22 "23:00:00" "07:00:00"
23 "00:00:00" "07:00:00"
Каждая строка состоит из:
day
, за которым следует;timeStart
, за которым следует;timeEnd
Таким образом, если день 16, то timeStart
и timeEnd
будут "23:00:00"
и "11:00:00"
соответственно.
Но если день 17, то timeStart
и timeEnd
будут "00:00:00"
и "11:00:00"
соответственно.
И т. Д. И т. Д.
Идея в том, что я проверяю, является ли timeEnd
defined
во время цикла.
Может это вам поможет?
РЕДАКТИРОВАТЬ
Если это то, как должен выглядеть вывод:
16 "23:00:00" "23:59:59"
17 "00:00:00" "11:00:00"
22 "23:00:00" "23:59:59"
23 "00:00:00" "07:00:00"
Тогда вы можете пойти:
for (var i = 0; i < JANDays.length; i++)
{
var day = JANDays[i].day;
// The code below will check to see if timeStart and timeEnd are defined
// If they are defined then they will be used,
// otherwise use the specified value after the pipes (||)
var timeStart = (JANDays[i] && JANDays[i].timeStart) || "00:00:00";
var timeEnd = (JANDays[i] && JANDays[i].timeEnd) || "23:59:59";
if (thisDayDate == day) {
console.log(day, timeStart, timeEnd);
}
}
Вы можете использовать карту, а затем проверить индекс, чтобы увидеть, если это нечетное или четное. Что-то вроде этого:
var JANDays = [{
day: 16,
timeStart: "23:00:00",
timeEnd: "24:59:59"
}, //It's Jan 16th Friday 11pm to
{
day: 17,
timeStart: "00:00:00",
timeEnd: "11:00:00"
}, //It's Jan 17th Sat 11am
{
day: 22,
timeStart: "23:00:00",
timeEnd: "24:59:59"
}, //It's Jan 22nd Friday 11pm to
{
day: 23,
timeStart: "00:00:00",
timeEnd: "07:00:00"
}
]; //It's Jan 23ed
var alt = JANDays.map(function(item,idx) {
if (idx % 2) {
return { day: item.day, timeStart: item.timeStart };
}
else {
return { day: item.day, timeEnd: item.timeEnd };
}
});
document.getElementById("output").innerHTML = JSON.stringify(alt);
<div id="output"></div>
Попробуй это:
var JANDays = [{day:16, timeStart:"23:00:00", timeEnd:"24:59:59"}, //It's Jan 16th Friday 11pm to
{day:17, timeStart:"00:00:00", timeEnd:"11:00:00"}, //It's Jan 17th Sat 11am
{day:22, timeStart:"23:00:00", timeEnd:"24:59:59"}, //It's Jan 22nd Friday 11pm to
{day:23, timeStart:"00:00:00", timeEnd:"07:00:00"}]; //It's Jan 23ed Sat 7am
var output = JANDays.map(function(item, index){
var temp = {};
temp.day = item.day;
if(index%2 == 0){
temp.timeStart = item.timeStart;
}
else{
temp.timeEnd = item.timeEnd;
}
return temp;
})
console.log(output);
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.