繁体   English   中英

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

[英]Check if Javascript Array Values are Sequential and Not Equal

读过这个 ,但它不适用(和/或,我无法弄清楚如何调整解决方案)。 我也找到了这个 ,但我不想改变数组 - 我只想查看信息。 我无法调整解决方案以满足我的需求。

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

例如 - 我有一组UNIX时间戳

var ts = [1451772000, 1451858400, 1452031200]

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

您可以像这样使用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. 如果它不是最后一个元素,那么当前数字应该严格小于下一个元素。

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

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

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

  1. 当前元素,
  2. 目前的指数
  3. 实际的数组

它将继续调用函数,直到数组元素用完或对函数的任何调用返回一个假值。

您可以像这样使用简单的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])); 

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

 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>'); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM