JS检查数组中的项是否是连续的但是没有分类

时间:2016-07-26 17:19:40

标签: javascript arrays

我在stackoverflow上找到了几篇关于此主题的帖子,like this one

...但建议解决方案中的主要假设是数组已排序或升序或降序......

我的问题是我想检查数组中是否有3个或更多个连续数字的序列,但是没有对数组进行排序,因为它由点的坐标组成(在坐标系中) - 点被随机添加到数组中游戏中的舞台......(我在GeoGebra工作,applet是我要加分的阶段......)

例如,我有下一个数组:

var array = [0, 4, 6, 5, 9, 8, 9, 12];

代码应该只将数字4,6和5计为连续数(尽管数组没有排序),但不是9和9或9和8。解释:我在JS中创建了代码,但它只能工作排序数组,除此之外,问题还在于它计算两个相等的值以及两个连续的数字(如8和9)......我的代码:

function findConsecutive(array) {
var nmbOfSeq = 0;
  for(var i=0; i<array.length; i++) {
    for(var j=0; j<array.length; j++) {
       if(array[j]==array[i]+1) {
          nmbOfSeq+=1;
       }
    }
  }
return nmbOfSeq;
}

提前感谢大家......我真的很难接受......

1 个答案:

答案 0 :(得分:0)

我建议首先获得一组三个的索引,然后使用索引组构建一个数组。

var array = [0, 4, 6, 5, 9, 8, 9, 12, 1, 2, 3, 4],
    indices = [],
    result = [];

array.forEach(function (a, i, aa) {
    var temp;
    if (i < 2) { return; }
    temp = aa.slice(i - 2, i + 1);
    temp.sort(function (a, b) { return a - b; });
    temp[0] + 1 === temp[1] && temp[1] + 1 === temp[2] && indices.push(i);
});

indices.forEach(function (a, i, aa) {
    if (aa[i - 1] + 1 === a) {
        result[result.length - 1].push(array[a]);
        return;
    }
    result.push(array.slice(a - 2, a + 1));
});

console.log(indices);
console.log(result);