首页 > js如何判断一组数字是否连续

js如何判断一组数字是否连续

js如何判断一组数字是否连续,得到一个临时数组[[3,4],[13,14,15],[17],[20],[22]];

var arr=[3, 4, 13 ,14, 15, 17, 20, 22];

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));

連續是什麼意思

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 連續嗎?(連續震蕩數列)

首先請定義何爲「連續」

然後就不是問題了。


好吧 这个还是可以试试的啊


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));
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 ] ]

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);

你跑一下,看是否是你想要的效果吧


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.否则,新建一个数组,且第一项为当前项

【热门文章】
【热门文章】