cari

Rumah  >  Soal Jawab  >  teks badan

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

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

var arr=[3, 4, 13 ,14, 15, 17, 20, 22];
高洛峰高洛峰2896 hari yang lalu642

membalas semua(7)saya akan balas

  • 高洛峰

    高洛峰2017-04-10 15:33:10

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

    balas
    0
  • PHP中文网

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

    首先請定義何爲「連續」

    然後就不是問題了。

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

    请自行测试

    结果

    balas
    0
  • 黄舟

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

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

    balas
    0
  • 迷茫

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

    balas
    0
  • PHPz

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

    balas
    0
  • 黄舟

    黄舟2017-04-10 15:33:10

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

    balas
    0
  • Batalbalas