js如何判断一组数字是否连续,得到一个临时数组[[3,4],[13,14,15],[17],[20],[22]];
var arr=[3, 4, 13 ,14, 15, 17, 20, 22];
js如何判断一组数字是否连续,得到一个临时数组[[3,4],[13,14,15],[17],[20],[22]];
var arr=[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.否则,新建一个数组,且第一项为当前项
let test = arr => {
let contain = [arr[0]],
res = [];
for(var i = 1,iL = arr.length;i < iL;i++){
if(arr[i] - arr[i-1] === 1){
contain.push(arr[i])
continue;
}
res.push(contain)
contain = [arr[i]]
}
res.push(contain)
return res;
}
/**
* 是否是 连续增加或减少4个字以上的数字,如1234,4321;
*
* @param {String} num 字符串形式的number
* @returns {Boolean}
*/
export const increaseNumber = (num) => {
let boo = num.length >= 4;
let bas = 0;
const met = num[1] > num[0]; // true is '+', else is '-'
num.split('').forEach((n, i) => {
// eslint-disable-next-line no-redeclare
var n = Number(n);
if (i === 0) { bas = n; }
if (n !== (met ? bas + i : bas - i)) {
boo = false;
}
});
return boo;
};
/**
* 是否是 连续增加或减少4个字以上的英文字母,如 abcd, dcba;
*
* @param {String} str 字符串形式的number或者单词
* @returns {Boolean}
*/
export const increaseNW = (str) => {
const lowercase = 'abcdefghijklmnopqrstuvxyz';
const r_low = lowercase.split('').reverse().join('');
const capitalization = 'ABCDEFGHIJKLMNOPQRSTUVXYZ';
const r_can = capitalization.split('').reverse().join('');
let boo = false;
if (str.length >= 4) {
boo = lowercase.includes(str) || r_low.includes(str) || capitalization.includes(str) || r_can.includes(str);
}
return boo;
};
突然发现一个不错的:
6 回答5.2k 阅读✓ 已解决
9 回答9.5k 阅读
5 回答3.7k 阅读✓ 已解决
4 回答8.1k 阅读✓ 已解决
7 回答10.1k 阅读
5 回答8.3k 阅读
2 回答10.5k 阅读✓ 已解决