Задать вопрос
Veqtor
@Veqtor

Зачем нужно усложнять код?

Здравствуйте. Подскажите кто-нибудь, есть такая задача: "Сделайте функцию, которая параметром будет принимать массив и проверять, есть ли в этом массиве два одинаковых элемента подряд." Вот моё решение:
function funk (arr) {
	for(let i = 0; i < arr.length; i++) {
		if(arr[i] == arr[i+1]) {
			return true;
		}
	}
	return false;
}

А вот решение, которое я подсмотрел в интернете:
function TwoElem(arr){
  for(let i = 0;i<arr.length;i++){
    if(i < arr.length -1) {
      if(arr[i] == arr[i+1]) return true;
    }
  }
  return false;
}

Вопрос: зачем автору кода первый иф? Я что-то не догоняю, ведь моё решение работает, зачем усложнять?
  • Вопрос задан
  • 529 просмотров
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
В твоём примере последняя итерация лишняя - i выходит за пределы массива, тебе надо было написать либо так:
function funk (arr) {
  for(let i = 0, length = arr.length - 1; i < length; i++) {
    if(arr[i] === arr[i+1]) {
      return true;
    }
  }
  return false;
}

либо, лучше, так:
function funk (arr) {
  for(let i = 1; i < arr.length; i++) {
    if(arr[i - 1] === arr[i]) {
      return true;
    }
  }
  return false;
}

Также заметь, что в современном JS никто не использует сравнение с приведением типов(==) из-за его ненадёжности, только полноценное сравнение - ===.

"Пример из интернета" - полная фигня. Кто-то впихнул костыль на ровном месте, решая ту самую "проблему", что имеет место быть в твоей реализации, вместо того чтоб подумать и написать один из предложенных мной выше вариантов.)
Ну по крайней мере теперь ты знаком с профессиональным термином костыль и как его применение выглядит в коде.)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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