js如何判断一组数字是否连续,得到一个临时数组[[3,4],[13,14,15],[17],[20],[22]];
var arr=[3, 4, 13 ,14, 15, 17, 20, 22];
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
javascriptfunction 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));
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 ] ]
連續是什麼意思
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 連續嗎?(連續震蕩數列)
首先請定義何爲「連續」
然後就不是問題了。
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);
请自行测试
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);
你跑一下,看是否是你想要的效果吧
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));
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.否则,新建一个数组,且第一项为当前项
好吧 这个还是可以试试的啊
連續是什麼意思
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 連續嗎?(連續震蕩數列)
首先請定義何爲「連續」
然後就不是問題了。
请自行测试
结果
你跑一下,看是否是你想要的效果吧
基本思想是
1.如果数组的后一项,比前一项大一,则是放到temp数组中
2.否则,新建一个数组,且第一项为当前项
好吧 这个还是可以试试的啊