2014-09-23 4 views
1

Я пытаюсь проверить минуты и часы недели, и я не могу понять, что я делаю неправильно. Объект недели может содержать вариации Day1 - Day7, поэтому я не хочу их проверять. Я хочу проверить вложенные часы/минуты. Я также не хочу использовать jquery, и он должен работать с ie8. Любая помощь будет принята с благодарностью.Проверить значения вложенных элементов объекта

week = { 
     Day1: { 
      Hours: 6, 
      Minutes: 20 
     }, 
     Day2: { 
      Minutes: 45 
     }, 
     Day3: { 
      Hours: 8, 
      Minutes: 15 
     } 
    }; 

hoursInValid = false; 
minutesInValid = false; 

for (var item in week) { 
     if (week.hasOwnProperty(item)) { 
      for (var i = 0; i < week[item].length; i++) 
      { 
       if (week[item][i].Hours > 6) { 
        hoursInValid = true; 
        break; 
       } 
       if (week[item][i].Minutes > 20) { 
        minutesInValid = true; 
        break; 
       } 

      } 
     } 
    } 
+0

Итак, в вашем примере я верю i = 'Hours' или' Minutes', поэтому вам не нужны '.Hours' или' .Minutes' в ваших выражениях. – Leeish

+0

Я считаю, что внутренний цикл должен быть 'for (ключ в var'), как и внешний цикл. –

+2

Объекты не имеют свойства длины в JavaScript, используйте другой цикл 'for (var key in Object)'. – PHPglue

ответ

1

Я не вижу необходимости внутреннего for цикла. Это решение, с которым я столкнулся. Я добавил проверки, чтобы убедиться, что объекты DayN имеют Hours и Minutes.

week = { 
    Day1: { 
    Hours: 6, 
    Minutes: 20 
    }, 
    Day2: { 
    Minutes: 45 
    }, 
    Day3: { 
    Hours: 8, 
    Minutes: 15 
    } 
}; 

hoursInValid = false; 
minutesInValid = false; 

for (var item in week) { 
    if (week[item].hasOwnProperty('Hours')) { 
    if (week[item].Hours > 6) { 
     hoursInValid = true; 
     break; 
    } 
    } 
    if (week[item].hasOwnProperty('Minutes')) { 
    if (week[item].Minutes > 20) { 
     minutesInValid = true; 
     break; 
    } 
    } 
} 
1

ли это вместо:

var invalidHours = {}, invalidMinutes = {}; 
for(var i in week){ 
    var w = week[i]; 
    if(w.hasOwnProperty('Hours')){ 
    invalidHours[i] = w.Hours > 6 ? true : false; 
    } 
    else{ 
    // no hours 
    } 
    if(w.hasOwnProperty('Minutes')){ 
    invalidMinutes[i] = w.Minutes > 20 ? true : false; 
    } 
    else{ 
    // no minutes 
    } 
} 
if(invalidHours.Day1) // day 1 hours are invalid 
if(invalidMinutes.Day2) // day 2 minutes are invalid 
+1

По-прежнему не 'item' =' Day1' и, следовательно, 'i' =' Hours'? Зачем вам нужно '.Hours' после' week [item] [i] '? – Leeish

+0

@Leeish Вы правы. Вышеприведенный код не работает. –

+0

Получил это с редактированием! Благодаря! –

1

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

for (var day in week) { 
    for (var unit in week[day]) { 
     if (unit === 'Hours' && week[day][unit] > 6) { 
      hoursInvalid = true; 
     } else if (unit === 'Minutes' && week[day][unit] > 20) { 
      minutesInvalid = true; 
     } 
    } 
} 

Высказывания перерыв может не позволить вам перебрать все свойства.

+0

Я только хочу, чтобы итерации в течение часа, пока он не сработает, и на минуту, пока он не сработает –

Смежные вопросы