Heim > Fragen und Antworten > Hauptteil
js如何判断一组数字是否连续,得到一个临时数组[[3,4],[13,14,15],[17],[20],[22]];
var arr=[3, 4, 13 ,14, 15, 17, 20, 22];
高洛峰2017-04-10 15:33:10
javascript
function arrange(source) { var t; var ta; var r = []; source.forEach(function(v) { console.log(t, v); // 跟踪调试用 if (t === v) { ta.push(t); t++; return; } ta = [v]; t = v + 1; r.push(ta); }); return r; } var arr = [3, 4, 13, 14, 15, 17, 20, 22]; console.log(arrange(arr));
C:\Users\James\Desktop>iojs test.js
undefined 3
4 4
5 13
14 14
15 15
16 17
18 20
21 22
[ [ 3, 4 ], [ 13, 14, 15 ], [ 17 ], [ 20 ], [ 22 ] ]
PHP中文网2017-04-10 15:33:10
連續是什麼意思
1,2,3 連續嗎?(連續自然數)
2,4,6,8 連續嗎?(連續偶數)
1,2,4,8,16,32,64 連續嗎?(連續等比數列)
1,2,3,5,6 連續嗎?(連續遞增數列)
1,2,4,8,9,10,11 連續嗎?(連續遞增數列)
1,0,-1,-2 連續嗎?(連續遞減數列)
1,0,1,0,1,0 連續嗎?(連續震蕩數列)
首先請定義何爲「連續」
然後就不是問題了。
黄舟2017-04-10 15:33:10
var arr=[3, 4, 13 ,14, 15, 17, 20, 22];
globalRetArr=[];
function t(dataArr)
{
if (dataArr.length==0)return;
var tmp = dataArr[0];
var tmpArr = [tmp];
var d;
for(var i=1;i<dataArr.length;++i)
{
d = dataArr[i];
if (tmp*1+1==d*1){tmp=d;}else{break;}
}
globalRetArr.push(dataArr.slice(0,i));
if(i != arr.length){
t(dataArr.slice(i));
}
}
t(arr);
console.log(globalRetArr);
请自行测试
黄舟2017-04-10 15:33:10
var arry=[-5,-4,0,1,2,3,4,13,14,15,17,20,22,99];
function test(arr){
var temp = [];
temp.push(arr[0]);
for(var i=1;i<arr.length;i++){
if(arr[i]-1===arr[i-1]){
temp.push(arr[i]);
}else{
arr = arr.splice(i);
break;
}
}
console.log(temp);
temp = [];
if(arr.length!==1){//这里说明下,因为for循环是从下标为1开始,所以这里处理当数组只有一项的时候
//不必继续执行test了。不处理就死循环了,别问我怎么知道的。。。
!!arr.length && test(arr);
}
};
test(arry);
你跑一下,看是否是你想要的效果吧
迷茫2017-04-10 15:33:10
var arrange = function(arr){
var result = [],
temp = [];
arr.sort(function(source, dest){
return source - dest;
}).concat(Infinity).reduce(function(source, dest){
temp.push(source);
if(dest-source>1){
result.push(temp);
temp = [];
}
return dest;
});
return result;
};
var arr=[3, 4, 13 ,14, 15, 17, 20, 22];
console.log(arrange(arr));
PHPz2017-04-10 15:33:10
function sortArray(arr) {
if (!arr.length) {
return arr;
}
else {
var array = [];
var temp = [arr[0]];
for (var i = 1, l = arr.length; i < l; i++) {
if (arr[i] === arr[i - 1] + 1) {
temp.push(arr[i]);
}
else {
array.push(temp);
temp = [arr[i]];
}
}
array.push(temp);
return array;
}
}
基本思想是
1.如果数组的后一项,比前一项大一,则是放到temp数组中
2.否则,新建一个数组,且第一项为当前项