Вкратце вот что я хочу:

он возвращает истину, когда

arr=[a, b, c, d, e, f] 

или

  arr=[a, b, a, b, c, d, c, e, a, b] 

они не должны быть в порядке.

и ложь, когда:

  arr=[a, a, b, c, d, d, e, f] 

Спасибо.

Wafae

новый участник этого сайта. Будьте внимательны, спрашивая разъяснения, комментируя и отвечая. Проверьте наш

Правила поведения

,

Вы можете использовать Array.prototype.every чтобы проверить, все ли элементы массива проходят тест (то есть функция обратного вызова, возвращающая логическое значение). В этом случае убедитесь, что текущий проверяемый элемент отличается от предыдущего ( index - 1 ), игнорируя самый первый элемент ( !index ).

 var arr1 = ["a", "b", "c", "d", "e", "f"]; var arr2 = ["a", "a", "b", "c", "d", "d", "e", "f"]; function arrayHasConsecitiveRepetition(arrayIn) { return arrayIn.every(function(element, index) { return !index || element !== arrayIn[index - 1]; }); } console.log(arrayHasConsecitiveRepetition(arr1)); // true console.log(arrayHasConsecitiveRepetition(arr2)); // false 

Конечно, вы также можете сделать это наоборот, используя Array.prototype.some чтобы проверить, соответствует ли хотя бы один элемент условию, что на самом деле может быть лучше с точки зрения производительности, так как он перестает оценивать, когда условие истинно *:

 var arr1 = ["a", "b", "c", "d", "e", "f"]; var arr2 = ["a", "a", "b", "c", "d", "d", "e", "f"]; function arrayHasConsecitiveRepetition(arrayIn) { return !arrayIn.some(function(element, index) { return index {amp}amp;{amp}amp; element === arrayIn[index - 1]; }); } console.log(arrayHasConsecitiveRepetition(arr1)); // true console.log(arrayHasConsecitiveRepetition(arr2)); // false 

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

Со страниц MDN:

Если такой элемент найден, метод each немедленно возвращает false .

Если такой элемент найден, some() немедленно возвращает true .

Один вариант:

 const arr1 = ['a', 'b', 'c', 'd', 'e', 'f']; const arr2 = ['a', 'a', 'b', 'c', 'd', 'd', 'e', 'f']; function checkArr(arr) { let previous; const check = !arr.some(letter ={amp}gt; { if (letter === previous) { return true; } previous = letter; }); console.log(check); } checkArr(arr1); // true checkArr(arr2); // false