检查Javascript数组值是否为连续且不相等

时间:2016-01-11 14:24:50

标签: javascript arrays

read this,但它不适用(和/或,我无法弄清楚如何调整解决方案)。 I also found this,但我不想更改数组 - 我只想查看信息。我无法调整解决方案以满足我的需求。

我想找出Javascript数组中的值是顺序的。

例如 - 我有一个UNIX时间戳数组

var ts = [1451772000, 1451858400, 1452031200]

我想返回true如果它们是连续的(从低到高的值),如果它们不是连续的,则返回false。如果有重复值,我还想返回false

3 个答案:

答案 0 :(得分:7)

您可以使用Array.prototype.every,就像这样

var data = [1451772000, 1451858400, 1452031200];
console.log(data.every((num, i) => i === data.length - 1 || num < data[i + 1]));

可以使用正常功能编写相同的内容,例如

console.log(data.every(function(num, index) {
  return index === data.length - 1 || num < data[index + 1];
}));

这里基本上只有两个条件需要注意

  1. 如果我们到达最后一个索引,那么所有元素都是好的。

  2. 如果它不是最后一个元素,那么当前的数字应该严格小于下一个元素。

  3. 该表达式处理上述两个条件。

    i === data.length - 1 || num < data[i + 1]
    

    every函数使用三个参数为数组的每个值调用传递给它的函数。

    1. 当前元素,
    2. 当前指数
    3. 实际数组
    4. 它将继续调用该函数,直到数组元素用完或对该函数的任何调用返回一个假值。

答案 1 :(得分:2)

您可以像这样使用简单的for-loop

function isSequential(data) {
  for (var i = 1, len = data.length; i < len; i++) {
    // check if current value smaller than previous value
    if (data[i] < data[i - 1]) {
      return false;
    }
  }
  
  return true;
}

console.log(isSequential([1]));
console.log(isSequential([1, 2, 3, 4]));
console.log(isSequential([1, 5, 3, 4]));
console.log(isSequential([1451772000, 1451858400, 1452031200]));

答案 2 :(得分:1)

这适用于任何长度并阻止第一个元素检查。

function isSequential(array) {
    return array.every(function (a, i, aa) {
        return !i || aa[i - 1] < a;
    });
}

document.write(isSequential([42]) + '<br>');
document.write(isSequential([1, 2, 3, 4]) + '<br>');
document.write(isSequential([1, 5, 3, 4]) + '<br>');
document.write(isSequential([1451772000, 1451858400, 1452031200]) + '<br>');