Эй, все это массив, который у меня есть:

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, поэтому помощь будет принята.

0
StealthRT 15 Дек 2015 в 20:23

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"

Каждая строка состоит из:

  1. day, за которым следует;
  2. timeStart, за которым следует;
  3. 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);
    }
}
1
Mr. Meeseeks 15 Дек 2015 в 19:02

Вы можете использовать карту, а затем проверить индекс, чтобы увидеть, если это нечетное или четное. Что-то вроде этого:

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>
0
Matt Burland 15 Дек 2015 в 17:31

Попробуй это:

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);
0
Rajesh 15 Дек 2015 в 17:31