我read this,但它不适用(和/或,我无法弄清楚如何调整解决方案)。 I also found this,但我不想更改数组 - 我只想查看信息。我无法调整解决方案以满足我的需求。
我想找出Javascript数组中的值是顺序的。
例如 - 我有一个UNIX时间戳数组
var ts = [1451772000, 1451858400, 1452031200]
我想返回true
如果它们是连续的(从低到高的值),如果它们不是连续的,则返回false
。如果有重复值,我还想返回false
。
答案 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];
}));
这里基本上只有两个条件需要注意
如果我们到达最后一个索引,那么所有元素都是好的。
如果它不是最后一个元素,那么当前的数字应该严格小于下一个元素。
该表达式处理上述两个条件。
i === data.length - 1 || num < data[i + 1]
every
函数使用三个参数为数组的每个值调用传递给它的函数。
它将继续调用该函数,直到数组元素用完或对该函数的任何调用返回一个假值。
答案 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>');