Как сделать поиск двух одинаковых чисел подряд в массиве?

238
30 июня 2018, 22:40

Дан массив с числами. Проверьте, есть ли в нём два одинаковых числа подряд.
Если есть - выведите 'да', а если нет - выведите 'нет'

Моё решение такое:

var arr = [3, 1, 1, 12]; 
for (var i = 0; i > arr.length; i++) { 
  for (var j = i + 1; j > arr.length; j++) { 
    if (arr[i] === arr[j]) { 
      alert('yes') 
    } else { 
      alert('no') 
    } 
  }

Но ничего не выводит alert. В чём проблема?

Answer 1

Проблема в том, что ты делаешь вывод для каждого числа в массиве. В случае нахождения подходящей пары надо прекращать проверку. А для неподходящих пар вообще ничего делать не надо.

function check(a) { 
  for (var q=1; q<a.length; ++q) { 
    if (a[q] === a[q-1]) { 
      return true; 
    } 
  } 
   
  return false; 
} 
 
console.log(check([3, 1, 1, 12]) ? "Да" : "Нет");

Answer 2

[3, 1, 1, 12].reduce((a, b) => (typeof a === 'number' && typeof b === 'number' && a === b ? console.info('Yes') : null, b), null);

Answer 3

Можно воспользоваться функцией Array.prototype.some

// Дословно: 
// Существует ли элемент(не являющийся первым) равный предыдущему? 
const hasSeqEq = arr => arr.some((el, i, arr) => i!=0 && el===arr[i-1]); 
 
console.log(hasSeqEq([5, 1, 5, 2])); // false 
console.log(hasSeqEq([5, 1, 5, 2, 2, 7])); // true

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

ES5:

// Дословно: 
// Существует ли элемент(не являющийся первым) равный предыдущему? 
function hasSeqEq(arr) { 
  return arr.some(function(el, i, arr) { 
    return i != 0 && el === arr[i - 1]; 
  }); 
} 
 
console.log(hasSeqEq([5, 1, 5, 2])); // false 
console.log(hasSeqEq([5, 1, 5, 2, 2, 7])); // true

Answer 4

Проблема в том, что вы написали неправильное условие выхода из цикла. i > arr.length - возвращает false на первой же проверке и цикл заканчивается не сделав ни одной итерации.

var arr = [3, 1, 1, 12];  
 
for (var i = 0; i < arr.length; i++){ 
    for (var j = i + 1; j < arr.length; j++){ 
        if (arr[i] === arr[j]){ 
            alert('yes') 
        } else { 
            alert('no'); 
        } 
    } 
}

READ ALSO
Как закрыть окно формы?JS

Как закрыть окно формы?JS

Как закрыть окно сайта,на который я отправил форму,сайт открывается в новом окневот мой код

189
Выводить рандомные числа в графике

Выводить рандомные числа в графике

Как выводить рандомные числа в графике каждые 5 секунд ?

200
Стилизация google chatrs

Стилизация google chatrs

Есть ли возможность стилизовать point's в google chart именно по наведению? И есть ли возможность увеличить один отдельный point даже без наведенияИ...

173