2016-05-04 3 views
-2

У меня есть цикл, как так:множественным, если тычинки внутри для цикла

for(var i = 0; i < data.reviews.length; i++){ 
    if(data.reviews[i].rating.overall > 80){ 
     console.log(i); 
     if(i > 1){ 
     console.log('more than 80 and more than 1'); 
     } 
     else{ 
     console.log('more than 80 and only 1'); 
     } 

    } 
} 

и массив мнений, как следующие:

"reviews":[ 
{ 
"rating":{"overall": 91} 
}, 
{ 
"rating":{"overall": 77} 
}, 
{ 
"rating":{"overall": 94} 
}, 
{ 
"rating":{"overall": 74} 
} 
], 

У меня есть некоторые условия, которые мне нужно встретиться, чтобы добавить некоторые HTML:

1), если отзывы в целом больше, чем 80, и есть более чем один отзыв (добавить слайд-шоу)

2) если общее количество обзоров больше 80, и есть только один обзор (добавьте обычный текст, просмотр текста jus без слайд-шоу)

На основании представленных данных отзывов я должен получить console.log('more than 80 and more than 1');, напечатанный только дважды, вместо этого в консоли I получить:

more than 80 and only 1 
more than 80 and only 1 
more than 80 and more than 1 
+0

Можете ли вы изменить свой вопрос, чтобы уточнить, что именно вы спрашиваете? –

+0

То, что я получаю в консоли, не то, что я думаю, что сценарий должен печатать – Alex

+0

Помните, что индексы массива основаны на ** 0 **. Кроме того, то, что печатает консоль, именно то, что вы описали, должно. – evolutionxbox

ответ

1

Если я понять вашу проблему правильно, то вам просто нужно изменить внутреннее if заявление чтобы проверить, сколько отзывов есть - не счетчик для перебора их ...

var data = { 
 
    "reviews": [ 
 
     { 
 
      "rating":{"overall": 91} 
 
     }, 
 
     { 
 
      "rating":{"overall": 77} 
 
     }, 
 
     { 
 
      "rating":{"overall": 94} 
 
     }, 
 
     { 
 
      "rating":{"overall": 74} 
 
     } 
 
    ] 
 
}; 
 

 
for (var i = 0, l = data.reviews.length; i < l; i++) { 
 
    if (data.reviews[i].rating.overall > 80) { 
 
     if (l > 1) { // check the overall count, instead of the current index 
 
      document.write('more than 80 and more than 1<br />'); 
 
     } 
 
     else { 
 
      document.write('more than 80 and only 1<br />'); 
 
     } 
 
    } 
 
}

0

попробовать это ~

 var count = 0; 
     for(var i = 0; i < data.reviews.length; i++){ 
     if(data.reviews[i].rating.overall > 80){ 
      count++; 
      } 
     } 
     if(count > 1){ 
      console.log('more than 80 and more than 1'); 
      } 
      else{ 
      console.log('more than 80 and only 1'); 
      } 
      //current.find(".reviews-wrapper ul").append("<li data-orbit-slide='headline-" + [i] + "'>" + data.reviews[i].notes + "<p class='bold'>" + data.reviews[i].user.nickname + ", " + data.reviews[i].groupInformation.groupTypeCode + ", " + data.reviews[i].groupInformation.age + "</p></li>"); 
0

вы пытаетесь рассчитывать рейтинг более 80?

var count = 0 

for(var i = 0; i < data.reviews.length; i++){ 
    var rating = data.reviews[i].rating.overall; 

    switch (rating) { 
     case (rating > 80): 
       count++; 
      break; 
    } 
} 

if (count > 1) { 
    console.log('more than 80 and more than 1'); 
} else { 
    console.log('more than 80 and only 1'); 
} 

С переключателем/случае, если вы хотите пойти дальше, вы можете добавить HTML-код вы хотите с каждым кронштейном

0

Итак, проблема, с которой вы столкнулись, заключается в том, что она не соответствует вашему вопросу. Вы спрашиваете, для трех случаев:

  • Если есть более чем один обзор и в целом выше 80
  • Если имеется только один обзор и в целом выше 80
  • Что-нибудь еще (эффективно ничего менее 80 в целом)

Однако вы используете 'i' свой итератор, чтобы ответить на вопрос «Есть ли более одного обзора», когда в этом контексте он отвечает на вопрос «Является ли текущая итерация третьей или более поздняя итерация этого цикла над отзывами "(Из-за нулевого индекса массивов «i> 1» будет истинным на третьей итерации).

Неясно из вашего вопроса только хотите ли вы рассчитывать отзывы более 80 к вашему общему или просто общему числу отзывов, так что я дам вам варианты пару цикла:

var sizeString='' 
if(data.reviews.length > 1) { 
    sizeString=' and more than 1'; 
} 
for(var i = 0; i< data.reviews.length; i++) { 
    if(data.reviews[i].rating.overall > 80){ 
    console.log('more than 80'+sizeString); 
    } 
} 

Или, если только отсчет, когда есть больше чем один более-80 обзор:

var sizeString='' 
var numOver80=0; 
for(var i = 0; i< data.reviews.length; i++) { 
    // This will simply find out if there are at least two over 80 ratings 
    if(data.reviews[i].rating.overall > 80){ 
    numOver80++; 
    if(numOver80 > 1){ 
     sizeString=' and more than 1'; 
     break; // Unless you want to get the actual total 
    } 
    } 
} 
for(var i = 0; i< data.reviews.length; i++) { 
    if(data.reviews[i].rating.overall > 80) { 
    console.log('more than 80'+sizeString); 
    } 
} 

Надеюсь, это чтобы вы указали в правильном направлении.

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