2010-11-26 48 views
2

我有一个数组作为检查如果数组元素是连续--- JavaScript的

arr = [1,2,3,4,6,7,8,9] 

现在我要检查,如果数组中的值是连续的。

作为更具体的,我想这

首先检查给第一和第二个元素是连续的下一个元素是不连续的,则算法中必须从连续数开始的地方返回的第一个元素

First Check will give 1 
Second Check will give 6 
and so on... 

请帮助 在此先感谢

+4

这是一个任务?它看起来像。如果是这样,请显示您迄今为止所尝试的内容以及您卡住的位置。如果不是,你能否解释一下需要你这样做的上下文? – 2010-11-26 12:05:31

+0

我想要一个算法,它会返回我的值,如我在最后描述的 – Rohit 2010-11-26 12:06:15

回答

3

一个旁注是你想多次调用它,所以每个调用应该知道它正在处理哪个数组,以及该数组中以前的offset是什么。你可以做的一件事是扩展本地Array对象。 [Demo]

Array.prototype.nextCons = (function() { 
    var offset = 0; // remember the last offset 
    return function() { 
    var start = offset, len = this.length; 
    for (var i = start + 1; i < len; i++) { 
     if (this[i] !== this[i-1] + 1) { 
     break; 
     } 
    } 
    offset = i; 
    return this[start]; 
    }; 
})(); 

使用

var arr = [1,2,3,4,6,8,9]; 
arr.nextCons(); // 1 
arr.nextCons(); // 6 
arr.nextCons();​ // 8 
0

伪代码:

int count = 0 
for i = 0 to array.length - 2 
    if {array[i + 1] - array[i] = 1 then 
     count+=1 
     return i 
    else count=0} 
4
/** 
* Given an array of number, group algebraic sequences with d=1 
* [1,2,5,4,8,11,14,13,12] => [[1,2],[4,5],[8],[11,12,13,14]] 
*/ 
import {reduce, last} from 'lodash/fp'; 

export const groupSequences = (array) => (
    reduce((result, value, index, collection) => { 
    if (value - collection[index - 1] === 1) { 
     const group = last(result); 
     group.push(value); 
    } else { 
     result.push([value]); 
    } 
    return result; 
    }, [])(array) 
);