Javascript - 如何检查3个数字是否连续并返回起始点?

Yas*_*sir 5 javascript arrays sequences

如果我有一个数组,[1, 2, 3, 5, 10, 9, 8, 9, 10, 11, 7]想要找到3个连续数字(无论是升序还是降序)的每个案例,我该怎么做?

然后,第二部分将使用这些序列中的每一个的索引来警告阵列.

对于前者 先前的数组将返回[0,4,6,7].

到目前为止,我有这个......这是一个艰难的开始

var arr = [1, 2, 3, 5, 10, 9, 8, 9, 10, 11, 7];
var results = [];

for (var i = 1; i < arr.length; i++) {
    if ((arr[i] - arr[i-1] != 1) && (arr[i] - arr[i+1] != 1)) {
        results.push(arr[i]);
    }

}
alert(results);
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

感谢math.abs指针.这就是我最终做的事情:

var array = [1, 2, 3, 5, 10, 9, 8, 9, 10, 11, 7];
var indexes = [];

for(var i=0; i < array.length; i++) {
    var diff = array[i+1] - array[i];
    if(Math.abs(diff)==1 && array[i+1]+diff == array[i+2]) {
        indexes.push(i);
    }
}
alert(indexes);
Run Code Online (Sandbox Code Playgroud)

rai*_*7ow 4

了解此任务的背景也会很有趣......无论如何,这是我的解决方案:

var arr     = [1, 2, 3, 5, 10, 9, 8, 9, 10, 11, 7];
var results = [];
var limit   = arr.length - 1; 

var sequence = 0;
for (var i = 0; i < limit; ++i) {
  var diff = arr[i+1] - arr[i];
  if (sequence && sequence === diff) {
    results.push(i-1);
    continue;
  }
  sequence = (diff === 1 || diff === -1) // or ... Math.abs(diff) === 1
           ? diff
           : 0;
}
console.log(results);
Run Code Online (Sandbox Code Playgroud)

这个想法很简单:我们不需要将两个邻居进行两次比较。) 如果此比较启动了一个序列,则提高一种序列标志就足够了,如果不存在序列,则降低它就足够了。