цикл for с использованием break и continue

Я пишу цикл for, который должен поместить не более трех элементов в массив «мешок», и использовать «разрыв», чтобы выйти из цикла, когда «мешок» заполнен указанными тремя элементами. Пока что мой код проходит три из четырех тестов. Проблема, с которой я сталкиваюсь, заключается в том, что для четвертого теста, который должен быть там, где код «разрывается» и цикл перестает работать, вместо этого четвертый элемент помещается в мой массив «мешок». Если «мешок» не заполнен, мне нужно пройти «куклы» до последнего элемента.

Я совсем новичок, и я пробовал пару разных вещей, но я не могу понять, что я делаю неправильно. Код у меня ниже.



function grabDoll(dolls){
  var bag=[];
  //coding here
  for (let i = 0; i < dolls.length; i++) {
    if (dolls[i] == 'Hello Kitty' || dolls[i] == 'Barbie doll') {
      bag.push(dolls[i])
    } else if (dolls[i] == '') {
      continue;
    } else if (bag.length - 1 === 2) {
      break;
    } else continue;
  }
  return bag;
}

person user15377612    schedule 16.03.2021    source источник
comment
Ваша проверка длины должна быть перед другими проверками, так как else if будет проверять более поздние условия только в том случае, если более ранние не совпали. (И нет причин использовать bag.length -1 === 2 вместо bag.length === 3. Вам также не нужен else continue, цикл будет продолжаться без предложения else.)   -  person T.J. Crowder    schedule 16.03.2021
comment
не знаете, зачем вам нужен перерыв, когда это можно сделать в самом коде цикла for. for (let i = 0; i < dolls.length && bag.length < 3; i++) {   -  person epascarello    schedule 16.03.2021


Ответы (3)


Вам нужно изменить свой код на этот

function grabDoll(dolls){
  var bag=[];
  //coding here
  for (let i = 0; i < dolls.length; i++) {
    if(bag.length === 3) {
      break;
    } else if (dolls[i] == 'Hello Kitty' || dolls[i] == 'Barbie doll') {
      bag.push(dolls[i])
    }
  }
  return bag;
}

Ваш код будет проверять else if только в том случае, если if или else if, которые были до него, приведут к ложным результатам. То есть, если if (dolls[i] == 'Hello Kitty' || dolls[i] == 'Barbie doll') принимает значение true, ваш код не будет проверять else if, связанный с этим if. Кроме того, вам не нужна команда continue для продолжения цикла. Когда цикл достигает конца, он снова проверяет условие цикла, если оно разрешается в true, цикл запускается снова, в противном случае цикл останавливается. Так что вам не нужна эта часть

} else if (dolls[i] == '') {
      continue;

ни это

else continue;
person Otávio Kochi    schedule 16.03.2021
comment
Большое спасибо за это объяснение! В качестве одного из условий упражнения я должен использовать continue в коде, поэтому я включил его в else if Очень ценю вашу помощь! :D - person user15377612; 16.03.2021

Вы можете использовать приведенный ниже код JS. Я только что добавил условие, что массив сумок должен содержать только 3 элемента в начале в операторе if else.

    function grabDoll(dolls)
    {
      var bag=[];     
      for (let i = 0; i < dolls.length; i++) 
      {
         if(bag.length == 3)
         {
           break;
         }
         else if (dolls[i] == 'Hello Kitty' || dolls[i] == 'Barbie doll') 
         {
           bag.push(dolls[i]);
         }            
         else continue;
       }
      return bag;
    }
person Amol Patil    schedule 16.03.2021

Спасибо @TJ Crowder за его комментарий. Понятно

function grabDoll(dolls){
  var bag=[];
  //coding here
  for (let i = 0; i < dolls.length; i++) {
    if (bag.length === 3) {
      break;
    } else if (dolls[i] == 'Hello Kitty' || dolls[i] == 'Barbie doll') {
      bag.push(dolls[i])
    } else if (dolls[i] == '') {
      continue;
    }     
    }
  return bag;
}
person user15377612    schedule 16.03.2021