如果求得一个数组中连续相同的三个以上的元素。
例如[1,2,3,3,3,3,4,5,6,7],结果为2-5;(只有一组结果)
再例如[1,2,3,3,3,4,5,6,6,6,6,7,8,9]结果为[2-4,7-10];(可能有多组结果,若有难度,可先考虑一组结果的情况。)

解决方案 »

  1.   

    啊,没看到第二种<script>
    var arr=[1,2,3,3,3,4,4,5,6,7];
    var res=[];
    var last="";
    var o=false;
    for(var i=0;i<arr.length;i++) {
    if(last===arr[i] && !o) {
    res.push(arr[i-1]);
    } else {
    if(res.length<2)
    res=[];
    else {
    if(!o)
    res.push(arr[i-1]);
    o=true;
    }
    }
    last=arr[i];
    }
    alert(res);
    </script>
      

  2.   

    切磋一下<script type="text/javascript">
    var arr = [1, 2, 2, 3, 3, 3, 5, 6, 6, 7, 8, 8, 9];function stripDouble(arr){
    var a = [];
    for(var i = 0; i < arr.length; i++){
    if(a[a.length - 1] != arr[i]){
    a.push(arr[i]);
    }
    }
    return a;
    }function check(arr){
    var ret = [];
    var a = stripDouble(arr);
    var i = 0;
    while(i < a.length - 3){
    var x = a[i];
    var y = a[i + 1];
    var z = a[i + 2];
    if(z - x == 2){
    ret.push({
    x: x,
    y: y,
    z: z
    });
    }
    i++;
    }
    return ret;
    }var ret = check(arr);
    for(var i = 0; i < ret.length; i++){
    alert(ret[i].x + ', ' + ret[i].y + ', '+  ret[i].z);
    }
    </script>
      

  3.   

    凑下热闹var a=[1,2,3,3,3,3,4,5,6,7];
    var b=[1,2,3,3,3,4,5,6,6,6,6,7,8,9];
    function re(obj,n){
    if(obj[n]==obj[n+1])
    return true;
    return false;
    }
    function re2(obj,n){
    var ret=n;
    if(re(obj,n)&&re(obj,n+1)){
    while(re(obj,n)){n++;}
    ret=n;
    }
    return n;
    }
    function re3(obj){
    var list=new Array();
    for(var i=0; i<obj.length; i++){
    var j=re2(obj,i);
    if(i!=j){
    list.push(i+"-"+j);
    i=j;
    }
    }
    return list;
    }
    alert(re3(a));
    alert(re3(b));
      

  4.   

    稍作修改,满足提问者要求,输出格式为1-3, 2-5.<script type="text/javascript">
    var arr = [1, 2, 2, 3, 3, 3, 5, 6, 6, 7, 8, 8, 9];function stripDouble(arr){
    var a = [];
    for(var i = 0; i < arr.length; i++){
    if(a[a.length - 1] != arr[i]){
    a.push(arr[i]);
    }
    }
    return a;
    }function check(arr){
    var ret = [];
    var a = stripDouble(arr);
    var i = 0;
    while(i < a.length - 2){
    var x = a[i];
    var y = a[i + 1];
    var z = a[i + 2];
    if(z - x == 2){
    ret.push(x + '-' + z);
    }
    i++;
    }
    return ret;
    }var ret = check(arr);
    for(var i = 0; i < ret.length; i++){
    alert(ret[i]);
    }
    </script>
      

  5.   

    嘿嘿自己也搞定了var rs=[];
    var a=[1,2,3,3,3,4,5,6,6,6,6,7,8,9];
    function diff(begin){
    if(!a[begin])
    return;
    var i=0;
    var n=begin;
    while(a[n+1]&&a[n]==a[n+1]){
    i++;
    n++;
    }
    if(i>1){
    rs.push(begin+'-'+(begin+i));
    }
    n++
    diff(n);}
    diff(0);
    alert(rs.join(','));
      

  6.   

    看到的时候已经结贴了....来一个玩玩<script>
        function getSameRange(array){
            var obj=new Object();
            for(var i=0;i<array.length;i++){
                obj[array[i]]=(i+1);
            }
            var ret=[]
            for(var k in obj){
                if((obj[++k]-obj[--k])&&(obj[++k]-obj[--k])!=1){
                    ret[ret.length]=(obj[k])+"-"+(obj[++k]-1)
                }
            }
            return ret
        }
        var v1=[1,2,3,3,3,3,4,5,6,6,7,7,10,11];
        var ret=getSameRange(v1);
        alert("结果范围是"+ret)
    </script>