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