如何防止数组连续重复元素?

时间:2019-12-25 10:22:30

标签: javascript arrays duplicates

很快,这就是我想要的:

时返回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]

谢谢。

2 个答案:

答案 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