我在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;
}
提前感谢大家......我真的很难接受......
答案 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);