把那些数作为下标,装数组里,如:
a[3333]=1,a[3338]=0,...
for(i=最小的那个;i<最大的那个;i++){
if(a[i]==1 && a[i+1]==1)
...
}
其实还是循环,你是怎样循环的,写出来学习下好吗?

解决方案 »

  1.   

    var data = '2008003334,2008003333, 2008003335, 2008003336, 2008003340, 2008003341';
       var arr = data.split(',').sort(sort);function sort(a,b){
       var aT = parseInt(a);
       var bT = parseInt(b);
        if(aT>bT){
       return 1;
    }else if(aT=bT){
      return 0;
    }else{
     return -1;
    }
       }先排序。再遍历。
      

  2.   

    function sort(a,b){ 
      var aT = parseInt(a); 
      var bT = parseInt(b); 
        if(aT>bT){ 
      return 1; 
    }else if(aT=bT){ 
      return 0; 
    }else{ 
    return -1; 

      } 
    ===》
    function sort(a,b){ return parseInt(a) > parseInt(b)}
      

  3.   

     var str = '2008003334,2008003333,2008003335,2008003336,2008003340,2008003341'; 
      var arr = str.split(',').sort(); 
      var re=/,/g;
      alert(arr.join(",").replace(re,"-")) 
      

  4.   

    要保证都是正整数哦,其他情况兄弟自己修改吧,
    最好封装成 function,名字俺没想好,哈L@_@K
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
     <HEAD>
      <TITLE> New Document </TITLE>
      <META NAME="Generator" CONTENT="EditPlus">
      <META NAME="Author" CONTENT="">
      <META NAME="Keywords" CONTENT="">
      <META NAME="Description" CONTENT="">
     </HEAD> <BODY>
      <SCRIPT LANGUAGE="JavaScript">
      <!--
    var s = "2008003333, 2008003334, 2008003335, 2008003336, 2008003337, 2008003340, 2008003341, 2008003342, 2008003350";var sNew = "";
    var separator = ", ";
    var connector = " - ";
    var a = s.split(separator);
    a.sort();
    for (var i=0; i<a.length; i++)
    {
    if (i > 0) sNew += separator; if((i+2)<a.length && (parseInt(a[i])+2)==parseInt(a[i+2]))
    {
    sNew += a[i] + connector; i += 2;
    while ((i+1)<a.length && (parseInt(a[i])+1)==parseInt(a[i+1]))
    {
    i++;
    }
    sNew += a[i]; 
    }
    else
    {
    sNew += a.slice(i, i+2).join(separator);
    }
    }alert(sNew);
      //-->
      </SCRIPT>
     </BODY>
    </HTML>
      

  5.   

    修正版,嘿L@_@K
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
     <HEAD>
      <TITLE> New Document </TITLE>
      <META NAME="Generator" CONTENT="EditPlus">
      <META NAME="Author" CONTENT="">
      <META NAME="Keywords" CONTENT="">
      <META NAME="Description" CONTENT="">
     </HEAD> <BODY>
      <SCRIPT LANGUAGE="JavaScript">
      <!--
    var s = "2008003333, 2008003334, 2008003335, 2008003336, 2008003337, 2008003340, 2008003341, 2008003342, 2008003350, 2008003351, 2008003361, 2008003362, 2008003363";var sNew = "";
    var separator = ", ";
    var connector = " - ";
    var a = s.split(separator);
    a.sort();
    for (var i=0; i<a.length; i++)
    {
    if (i > 0) sNew += separator; if((i+2)<a.length && (parseInt(a[i])+2)==parseInt(a[i+2]))
    {
    sNew += a[i] + connector; i += 2;
    while ((i+1)<a.length && (parseInt(a[i])+1)==parseInt(a[i+1]))
    {
    i++;
    }
    sNew += a[i]; 
    }
    else
    {
    sNew += a.slice(i, i+2).join(separator);
    // 丢了一句,哈
    i++;
    }
    }
    alert(sNew);  //-->
      </SCRIPT>
     </BODY>
    </HTML>
      

  6.   

    好像也没想到别的方法……
    提个想法,如果连续数字比较多的话,可以根据实际情况,适当的增加步长,如3个数一加,应该可以减少不少的循环次数
    for(var i=0;i<arr.length;i+=3)
      

  7.   


    <html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>新建网页 1</title>
    </head><body>
    <script language="javascript">
    <!--
    var tmp=""
    var data = '2008003313,2008003314,2008003315,2008003316,2008003333,2008003334,2008003335,2008003336,2008003340,2008003341,2008003361,2008003351';
    test(data)function getArray(d){return d.split(',').sort(function(a,b){return a-b;})}
    function test(d){
    var dataArray = getArray(data);
    var str=parseInt(dataArray[0])
    var t=1
    while(data.indexOf(str+1)!=-1){
    str++;
    t++;
    }
    if (t==1)tmp+=dataArray[0]+","
    if (t==2)tmp+=dataArray[0]+","+dataArray[1]+","
    if(t>2 )tmp+=dataArray[0]+"-"+str+","
    dataArray=dataArray.splice(t,dataArray.length);
    if (dataArray.length>0){
    data=dataArray.join(",")
    test(data)
    }
    else {tmp=tmp.substr(0,tmp.length-1);alert(tmp)}
    }//-->
    </script>
    </body></html>
      

  8.   


    <html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>新建网页 1</title>
    </head><body>
    <script language="javascript">
    <!--
    var tmp=""
    var data = '2008003313,2008003314,2008003315,2008003316,2008003333,2008003334,2008003335,2008003336,2008003340,2008003341,2008003361,2008003351,2008003323,2008003324,2008003325,2008003326,2008003383,2008003384,2008003385,2008003386,2008003390,2008003391,2008003311,2008003371';
    test(data)function getArray(d){return d.split(',').sort(function(a,b){return a-b;})}
    function test(d){
    var dataArray = getArray(data);
    var str=parseInt(dataArray[0])
    var t=1
    while(data.indexOf(str+1)!=-1){
    str++;
    t++;
    }
    if (t==1)tmp+=dataArray[0]+","
    if (t==2)tmp+=dataArray[0]+","+dataArray[1]+","
    if(t>2 )tmp+=dataArray[0]+"-"+str+","
    dataArray=dataArray.splice(t,dataArray.length);
    if (dataArray.length>0){
    data=dataArray.join(",")
    test(data)
    }
    else {tmp=tmp.substr(0,tmp.length-1);alert(tmp)}
    }//-->
    </script>
    </body></html>
      

  9.   

    有一想法:就是吧相连的2个数如果相减等于1则放在一个数组内这样就可以吧连续的分成同一个数组,然后取最小和最大的那个拼在一起,然后再用拼一次array(2008003333,2008003334,2008003335,2008003336)array(2008003340,2008003341)
    取最小和最大
    第一次拼2008003333 - 2008003336  2008003340 - 2008003341 第二次拼2008003333 - 2008003336, 2008003340 - 2008003341 
    就这样的形式,你看这样的思路行不行
      

  10.   

    虽然你己经结帖子了,刚好看到就写了一下,不知道符合你的要求不?<script type="text/javascript">var str = "2008003333,2008003334, 2008003335, 2008003336, 2008003340, 2008003341 ";var reg = /(-?)(\d+)[^-\d]+?(\d+)(-?)/g;
    var flag = true;
    while(flag)
    {
    flag = false;
    str = str.replace(reg,function(){
    if(arguments[3] - arguments[2] == 1)
    {
       flag = true;
       
       return (arguments[1]?"" : arguments[2]) + "-" + (arguments[4]?"":arguments[3]);
    }
    return (arguments[0]);

    });
    }
    alert(str);</script>