shashkodarya
@shashkodarya

Loop (for) vs forEach почему выдает разный результат?

На сайте https://codefights.com/
там в самом начале есть таск almostIncreasingSequence
суть его в том, чтобы выводило тру в случ, если из массива можно было бы убрать не более одного эл-та и чтобы он был строго возрастающим, ну и фолз если нужно убрать более чем один эл-т.
в решении нужно просто правильно поставить условия. С этой задачей я справилась, но мне он выводил все равно фолз, а ошибка была только в том, что я юзала map, forEach. а когда сделала это старым добрым способом через фор, то все заработало.
вот собственно код:
function almostIncreasingSequence(sequence) {
	var counterDeletedElements = 0;
    
    /*for(var i = 0; i < sequence.length; i++){
         if( sequence[i] <= sequence[i-1] ){
           counterDeletedElements++;

            if(counterDeletedElements > 1) return false
            
            if(sequence[i]<= sequence[i-2] && sequence[i+1] <= sequence[i-1] ) return false    
          }
    }*/
    
    sequence.map(function(el,i){
         if( el <= sequence[i-1] ){
           counterDeletedElements++;

            if(counterDeletedElements > 1) return false
            
            if(el<= sequence[i-2] && sequence[i+1] <= sequence[i-1] ) return false    
          }
    })

    return true
}
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
for проходит по массиву, и ничего не возвращает. map проходит по массиву, и возвращает массив элементов из return
UPD: Если вы в forEach пишите return, но вы не выходите из функции almostIncreasingSequence, вы типа делаете continue для цикла, и он продолжается, и в итоге функция возвращает return true
Вот примеры:
// Вернет 0, цикл завершится
function testFor() {
   for(var i = 0; i < 10; i++) {
      return i;
   }
}
// Вернет 2,4,6, т.к. map создает новый массив на основе результатов функции для каждого элемента массива
function testMap() {
   return [1,2,3].map(function(el) { return el*2; });
}
// Не вернет ничего. переданная функция будет вызвана для каждого элемента массива. 
// return просто выходит из цикла.
function testForEach() {
   return [1,2,3].forEach(function(el) { return el; });
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы