xuzuning(唠叨)請進:數組排序,在IE正常,Netscape就不聽使喚啦!!! 暈。難道沒有玩Netscape了嗎????拜托幫幫忙啊。小弟急死啦!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.google.com/search?hl=zh-CN&ie=UTF-8&oe=UTF-8&q=sort+array+javascript&lr= To: lions911(--ASP--ASP.NET--) ,難道你覺得做一個東西出來只有一個東西才支持,這樣的產品你覺得好嗎???加上這也是客戶要求的。 我想到一個辦法,就是分三次去讀數組,然后將生成的列表組合新的數組,那么最終數組一定是想要的結果。我的構思如下:第一次讀...sort_key = 2;ar = content1.sort(sort_desc);for(v in ar) 在這建立數組1//document.write(ar[v]+"<br/>");第二次讀sort_key = 3;ar = 數組1.sort(sort_asc);for(v in ar) 在這建立數組2//document.write(ar[v]+"<br/>");第三次讀....sort_key = 4;ar = 數組2.sort(sort_asc);for(v in ar) document.write(ar[v]+"<br/>");這樣的話應該可以得到想要的列表吧?但我不會建立那兩數組,希望大家幫幫忙吧,先謝了! 原先的我给改了一下, 可以在 IE 和 NS6+/Mozilla 下跑了, 不过在二者中结果有些不太一样(别急, 下一贴我给另外一个例子), 另外原来程序为什么不能在 NS 下跑的原因是 ar = content1.sort(sort_desc);, 应该改为 var ar = content1.sort(sort_desc); :P<!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><script language="JavaScript"><!--content1 = new Array();content1[0] = new Array("01","aaaaa","46","1","0");content1[1] = new Array("02","bbbbb","8","1","1");content1[2] = new Array("03","ccccc","10","1","0");content1[3] = new Array("04","ddddd","11","2","0");content1[4] = new Array("05","eeeee","15","2","0");content1[5] = new Array("06","fffff","10","1","0");content1[6] = new Array("07","ggggg","20","3","0");content1[7] = new Array("08","hhhhh","32","3","0");content1[8] = new Array("09","iiiii","41","2","0");content1[9] = new Array("10","jjjjj","10","1","0");var sort_key = 0; // 列号var ascending = true; //升序/降序function doSort(rowA, rowB){ var cellA = rowA[sort_key]; var cellB = rowB[sort_key]; //sort() 方法调用的函数要求 A>B, 返回 正数, A==B, 返回 0, A<B, 返回 负数 var polarity = 0 ; if (cellA > cellB){ polarity = 1; }else if (cellA == cellB){ polarity = 0; }else{ polarity = -1; } //根据升序/降序调整 polarity = ascending ? polarity : -1*polarity; return polarity;}function sort(){ var ar = content1; sort_key = 2 - 1; //js 中数组是从 0 开始的 ascending = false; //降序 ar = ar.sort(doSort); sort_key = 3 - 1; ascending = true; //升序 ar = ar.sort(doSort); sort_key = 4 - 1; ascending = true; //升序 ar = ar.sort(doSort); //document.write(ar[v]+"<br/>"); document.write("<Table width='50%' border=1>"); for(v in ar) { document.write("<tr>"); for(var i=0; i<5; i++){ document.write("<td>"+ar[v][i]+"</td>"); } document.write("<tr>"); } document.write("<Table>");}//--></script><body onload="sort();"></body></html> 这是另外的那个例子, 排序结果在 IE 和 Mozilla 下测试通过, 是一样的<!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><script language="JavaScript"><!--content1 = new Array();content1[0] = new Array("01","aaaaa","46","1","0");content1[1] = new Array("02","bbbbb","8","1","1");content1[2] = new Array("03","ccccc","10","1","0");content1[3] = new Array("04","ddddd","11","2","0");content1[4] = new Array("05","eeeee","15","2","0");content1[5] = new Array("06","fffff","10","1","0");content1[6] = new Array("07","ggggg","20","3","0");content1[7] = new Array("08","hhhhh","32","3","0");content1[8] = new Array("09","iiiii","41","2","0");content1[9] = new Array("10","jjjjj","10","1","0");var sort_string = ""; //需要排序的列的集合, 以逗号分开, 如果列号前面有负号, 代表DESC排序 //例如 3,2,-1 代表按照 第3,2,1列排序, 其中第1列为DESC排序 //注意列号是从0开始的function doSort(rowA, rowB){ var keys = sort_string.split(","); var nA = ""; //nA 和 nB 保存代表该行在排序中的一个数字, 每位对应 sort_string 中的一列 var nB = ""; //例如 三个排序自动, sA = 100, sB=000, 那么说明两行比较时第一列 rowA 较大. for (var i=0; i<keys.length; i++){ //获得 sort_string 中的列号, 以及是否DESC排序 var idx = keys[i]; var ascending = 1; if (idx < 0){ idx = -1 * idx; ascending = -1; } //比较两行数据中该列的值 var cellA = rowA[idx]; var cellB = rowB[idx]; if (cellA > cellB){ polarity = 1; }else if (cellA == cellB){ polarity = 0; }else{ polarity = -1; } polarity = ascending*polarity; //确定 nA/nB if(polarity>0){ nA = nA + "1"; nB = nB + "0"; }else if(polarity==0){ nA = nA + "0"; nB = nB + "0"; }else{ nA = nA + "0"; nB = nB + "1"; } } //alert("RowA("+rowA+"):["+nA+"], RowB("+rowB+"):["+nB+"]"); //sort() 方法调用的函数要求 A>B, 返回 正数, A==B, 返回 0, A<B, 返回 负数 if (nA > nB){ return 1; }else if (nA == nB){ return 0; }else{ return -1; }}function sort(){ sort_string = "3,2,-1"; var ar = content1.sort(doSort); document.write("<Table width='50%' border=1>"); for(v in ar) { document.write("<tr>"); for(var i=0; i<5; i++){ document.write("<td>"+ar[v][i]+"</td>"); } document.write("<tr>"); } document.write("<Table>");}//--></script><body onload="sort();"></body></html> >>To: lions911(--ASP--ASP.NET--) ,難道你覺得做一個東西出來只有一個東西才支持,這樣的產品你覺得好嗎???说的很好。 謝謝glassprogrammer(),我的問題已經解決啦,原來是我的算法寫得有問題,出錯的不是NetScape,是IE。------------------sort_key = 2;ar = content1.sort(sort_desc);sort_key = 3;ar = ar.sort(sort_asc);sort_key = 4;ar = ar.sort(sort_asc);for(v in ar) document.write(ar[v]+"<br/>");--------------------------------------------------------------上面的排序方法,其實根本就沒有按我的要求來做,還是我自己犯了一個低級錯誤,現把正確的方法貼給大家參考參考。(在IE6、NetScape6.21、NetScape7.0、NetScape7.1通過)<HTML><HEAD><TITLE> New Document </TITLE><meta http-equiv="Content-Type" content="text/html; charset=big5"><link rel="stylesheet" href="style.css" type="text/css"><script language="JavaScript"><!--content1 = new Array();content1[0] = new Array("aaa","01","46","1","0");content1[1] = new Array("bbb","02","18","1","1");content1[2] = new Array("ccc","03","10","1","0");content1[3] = new Array("ddd","04","10","1","0");content1[4] = new Array("eee","05","15","2","0");content1[5] = new Array("fff","06","17","1","0");content1[6] = new Array("ggg","07","20","3","1");content1[7] = new Array("hhh","08","32","3","0");content1[8] = new Array("iii","09","41","2","0");content1[9] = new Array("jjj","10","03","1","0");//組合排序function solesort(a,b){ var num = a.length; if (a[num-1]-b[num-1]!=0) //降序 return -(a[num-1]-b[num-1]); if (a[num-2]-b[num-2]!=0) //升序 return a[num-2]-b[num-2]; if (a[num-3]-b[num-3]!=0) //降序 return -(a[num-3]-b[num-3]); return a[num-4]-b[num-4]; //升序}//打印結果//先按下標4降序排列,再按下標3升序排列,再按下標2降序列,下標1判斷在前三種相同的情況下按原數據位置排列ar = content1.sort(solesort);for(v in ar) document.write(ar[v]+"<br/>");//--></script></HEAD><BODY bgcolor="#FFFFFF" text="#000000"></BODY></HTML>-------------------------------------------------------------------------------因為在實際中,排序的數組是按要求動態生成的,所以這個判斷需要將條件放到數組的后四位中才能起作用。 jmail发邮件失败 Extjs中panel哪个配置项能设置不显示title那条?? 动态脚本树问题!!!! 奇怪的问题,让JS代码失效 求大楚网首页广告:JS调用flash并加链接的方法!(精) 动态页面动态显示问题,先谢谢各位XDJM了 怎样把一个二维数组赋值给JS? 需要在自己的网页上加入显示某QQ是否在线的功能,请给个源代码。 java高手们,文件上传时,如何使zip文件自动解包! jsp图片上传及预览 在线求教js打印问题,100分着急!!!! select问题:select的字体颜色我会 “动态” 改变,可是背景色,字的大小,或者怎样给字加粗呢?
第一次讀...
sort_key = 2;
ar = content1.sort(sort_desc);
for(v in ar)
在這建立數組1
//document.write(ar[v]+"<br/>");第二次讀sort_key = 3;
ar = 數組1.sort(sort_asc);
for(v in ar)
在這建立數組2
//document.write(ar[v]+"<br/>");第三次讀....sort_key = 4;
ar = 數組2.sort(sort_asc);
for(v in ar)
document.write(ar[v]+"<br/>");這樣的話應該可以得到想要的列表吧?但我不會建立那兩數組,希望大家幫幫忙吧,先謝了!
<html>
<head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<script language="JavaScript">
<!--
content1 = new Array();
content1[0] = new Array("01","aaaaa","46","1","0");
content1[1] = new Array("02","bbbbb","8","1","1");
content1[2] = new Array("03","ccccc","10","1","0");
content1[3] = new Array("04","ddddd","11","2","0");
content1[4] = new Array("05","eeeee","15","2","0");
content1[5] = new Array("06","fffff","10","1","0");
content1[6] = new Array("07","ggggg","20","3","0");
content1[7] = new Array("08","hhhhh","32","3","0");
content1[8] = new Array("09","iiiii","41","2","0");
content1[9] = new Array("10","jjjjj","10","1","0");var sort_key = 0; // 列号
var ascending = true; //升序/降序function doSort(rowA, rowB){
var cellA = rowA[sort_key];
var cellB = rowB[sort_key];
//sort() 方法调用的函数要求 A>B, 返回 正数, A==B, 返回 0, A<B, 返回 负数
var polarity = 0 ;
if (cellA > cellB){
polarity = 1;
}else if (cellA == cellB){
polarity = 0;
}else{
polarity = -1;
}
//根据升序/降序调整
polarity = ascending ? polarity : -1*polarity; return polarity;
}function sort(){
var ar = content1; sort_key = 2 - 1; //js 中数组是从 0 开始的
ascending = false; //降序
ar = ar.sort(doSort); sort_key = 3 - 1;
ascending = true; //升序
ar = ar.sort(doSort); sort_key = 4 - 1;
ascending = true; //升序
ar = ar.sort(doSort); //document.write(ar[v]+"<br/>"); document.write("<Table width='50%' border=1>");
for(v in ar) {
document.write("<tr>");
for(var i=0; i<5; i++){
document.write("<td>"+ar[v][i]+"</td>");
}
document.write("<tr>");
}
document.write("<Table>");
}
//-->
</script>
<body onload="sort();"></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>
<script language="JavaScript">
<!--
content1 = new Array();
content1[0] = new Array("01","aaaaa","46","1","0");
content1[1] = new Array("02","bbbbb","8","1","1");
content1[2] = new Array("03","ccccc","10","1","0");
content1[3] = new Array("04","ddddd","11","2","0");
content1[4] = new Array("05","eeeee","15","2","0");
content1[5] = new Array("06","fffff","10","1","0");
content1[6] = new Array("07","ggggg","20","3","0");
content1[7] = new Array("08","hhhhh","32","3","0");
content1[8] = new Array("09","iiiii","41","2","0");
content1[9] = new Array("10","jjjjj","10","1","0");var sort_string = ""; //需要排序的列的集合, 以逗号分开, 如果列号前面有负号, 代表DESC排序
//例如 3,2,-1 代表按照 第3,2,1列排序, 其中第1列为DESC排序
//注意列号是从0开始的function doSort(rowA, rowB){
var keys = sort_string.split(",");
var nA = ""; //nA 和 nB 保存代表该行在排序中的一个数字, 每位对应 sort_string 中的一列
var nB = ""; //例如 三个排序自动, sA = 100, sB=000, 那么说明两行比较时第一列 rowA 较大.
for (var i=0; i<keys.length; i++){
//获得 sort_string 中的列号, 以及是否DESC排序
var idx = keys[i];
var ascending = 1;
if (idx < 0){
idx = -1 * idx;
ascending = -1;
}
//比较两行数据中该列的值
var cellA = rowA[idx];
var cellB = rowB[idx];
if (cellA > cellB){
polarity = 1;
}else if (cellA == cellB){
polarity = 0;
}else{
polarity = -1;
}
polarity = ascending*polarity;
//确定 nA/nB
if(polarity>0){
nA = nA + "1";
nB = nB + "0";
}else if(polarity==0){
nA = nA + "0";
nB = nB + "0";
}else{
nA = nA + "0";
nB = nB + "1";
}
}
//alert("RowA("+rowA+"):["+nA+"], RowB("+rowB+"):["+nB+"]"); //sort() 方法调用的函数要求 A>B, 返回 正数, A==B, 返回 0, A<B, 返回 负数
if (nA > nB){
return 1;
}else if (nA == nB){
return 0;
}else{
return -1;
}
}function sort(){
sort_string = "3,2,-1";
var ar = content1.sort(doSort); document.write("<Table width='50%' border=1>");
for(v in ar) {
document.write("<tr>");
for(var i=0; i<5; i++){
document.write("<td>"+ar[v][i]+"</td>");
}
document.write("<tr>");
}
document.write("<Table>");
}
//-->
</script>
<body onload="sort();"></body>
</html>
sort_key = 2;
ar = content1.sort(sort_desc);
sort_key = 3;
ar = ar.sort(sort_asc);
sort_key = 4;
ar = ar.sort(sort_asc);
for(v in ar)
document.write(ar[v]+"<br/>");--------------------------------------------------------------
上面的排序方法,其實根本就沒有按我的要求來做,還是我自己犯了一個低級錯誤,現把正確的方法貼給大家參考參考。(在IE6、NetScape6.21、NetScape7.0、NetScape7.1通過)
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<link rel="stylesheet" href="style.css" type="text/css">
<script language="JavaScript">
<!--
content1 = new Array();
content1[0] = new Array("aaa","01","46","1","0");
content1[1] = new Array("bbb","02","18","1","1");
content1[2] = new Array("ccc","03","10","1","0");
content1[3] = new Array("ddd","04","10","1","0");
content1[4] = new Array("eee","05","15","2","0");
content1[5] = new Array("fff","06","17","1","0");
content1[6] = new Array("ggg","07","20","3","1");
content1[7] = new Array("hhh","08","32","3","0");
content1[8] = new Array("iii","09","41","2","0");
content1[9] = new Array("jjj","10","03","1","0");//組合排序
function solesort(a,b)
{
var num = a.length;
if (a[num-1]-b[num-1]!=0) //降序
return -(a[num-1]-b[num-1]);
if (a[num-2]-b[num-2]!=0) //升序
return a[num-2]-b[num-2];
if (a[num-3]-b[num-3]!=0) //降序
return -(a[num-3]-b[num-3]);
return a[num-4]-b[num-4]; //升序
}//打印結果
//先按下標4降序排列,再按下標3升序排列,再按下標2降序列,下標1判斷在前三種相同的情況下按原數據位置排列
ar = content1.sort(solesort);
for(v in ar)
document.write(ar[v]+"<br/>");
//-->
</script>
</HEAD>
<BODY bgcolor="#FFFFFF" text="#000000">
</BODY>
</HTML>-------------------------------------------------------------------------------因為在實際中,排序的數組是按要求動態生成的,所以這個判斷需要將條件放到數組的后四位中才能起作用。