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; } }先排序。再遍历。
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)}
var str = '2008003334,2008003333,2008003335,2008003336,2008003340,2008003341'; var arr = str.split(',').sort(); var re=/,/g; alert(arr.join(",").replace(re,"-"))
要保证都是正整数哦,其他情况兄弟自己修改吧, 最好封装成 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>
修正版,嘿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>
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;
}
}先排序。再遍历。
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)}
var arr = str.split(',').sort();
var re=/,/g;
alert(arr.join(",").replace(re,"-"))
最好封装成 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>
<!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>
提个想法,如果连续数字比较多的话,可以根据实际情况,适当的增加步长,如3个数一加,应该可以减少不少的循环次数
for(var i=0;i<arr.length;i+=3)
<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>
<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>
取最小和最大
第一次拼2008003333 - 2008003336 2008003340 - 2008003341 第二次拼2008003333 - 2008003336, 2008003340 - 2008003341
就这样的形式,你看这样的思路行不行
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>