很快,这就是我想要的:
当
时返回true arr=[a, b, c, d, e, f]
或
arr=[a, b, a, b, c, d, c, e, a, b]
他们不一定要整齐。
,在以下情况下为false:
arr=[a, a, b, c, d, d, e, f]
谢谢。
答案 0 :(得分:1)
您可以使用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 && element === arrayIn[index - 1];
});
}
console.log(arrayHasConsecitiveRepetition(arr1)); // true
console.log(arrayHasConsecitiveRepetition(arr2)); // false
*实际上,事实证明,一旦(不)满足条件,这两种方法都会立即返回,因此,与其说是性能,不如说是味觉或风格。在这种情况下,我更喜欢使用第一种方法。
从MDN页面:
如果找到了这样的元素,则
every
方法将立即返回false
。如果找到了这样的元素,
some()
将立即返回true
。
答案 1 :(得分:0)
一个选项:
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 => {
if (letter === previous) {
return true;
}
previous = letter;
});
console.log(check);
}
checkArr(arr1); // true
checkArr(arr2); // false