各位兄台,帮我分析一下我的表格排序函数效率怎么会这么低??

leaxin 2003-07-05 05:48:50
加精
function orderTB(objTB,index){
var i;
var j;
for(i=1;i<(objTB.rows.length-1);i++){
for(j=i+1;j<objTB.rows.length;j++){
if(parseFloat(objTB.rows[j].cells[index].innerText)>parseFloat(objTB.rows[i].cells[index].innerText)){
objTB.moveRow(j,i);
}

}
}
}

当表格有1206行的时候,我的IE就死翘翘了
帮我想想办法好吗?
...全文
43 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fason 2003-07-06
  • 打赏
  • 举报
回复
http://www.9499.net?go=tc
不知它的效率如何,现在不方便测试,我写过一个简单的,和用tb.moveRow(i,j)的速度比是1:10左右(数据量500-1000)
leaxin 2003-07-06
  • 打赏
  • 举报
回复
emu(ston):
改进前 391 改进后30
哗,天哪!!
emu 2003-07-06
  • 打赏
  • 举报
回复
一个outerHTML的示范:

function orderTB3(objTB,index){
var ar=[],ar2=[];
var rows = objTB.rows
for (var i=1;i<rows.length;i++) {
var st = rows[i].outerHTML;
ar[i-1]=[rows[i].cells[index].innerText,st];
ar2[i-1]=st;
}
ar.sort(function(a,b){return b[0]-a[0]});
var st = ar2.join("").replace(/></g,">\\s*<").replace(/\//g,"\\/");
var reg = new RegExp(st);
for (var i=0;i<ar.length;i++)
ar2[i]=ar[i][1];
st = ar2.join("");
objTB.outerHTML= objTB.outerHTML.replace(reg,st)
}

emu 2003-07-06
  • 打赏
  • 举报
回复
其实要是数据量大的话不要用节点操作,直接用outerHTML要块的多。
emu 2003-07-06
  • 打赏
  • 举报
回复
楼主原来是想保留首行的降序排列的,给我弄倒了呵呵。

<body>
<TABLE><TR><TD>a</TD><TD>b</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR></TABLE>

<SCRIPT LANGUAGE="JavaScript">
<!--
function orderTB(objTB,index){
for(var i=1;i<(objTB.rows.length-1);i++){
for(var j=i+1;j<objTB.rows.length;j++){
if(parseFloat(objTB.rows[j].cells[index].innerText)>parseFloat(objTB.rows[i].cells[index].innerText)){
objTB.moveRow(j,i);
}
}
}
}
function orderTB2(objTB,index){
var ar=[];
var rows = objTB.rows
for (var i=1;i<rows.length;i++) ar[i-1]=[rows[i].cells[index].innerText,rows[i].cloneNode(true)];
ar.sort(function(a,b){return b[0]-a[0]});
for (var i=rows.length-1;i>0;i--) objTB.deleteRow(i);
for (var i=0;i<ar.length;i++)
objTB.firstChild.insertBefore(ar[i][1]);
}
var tb = document.getElementsByTagName("TABLE")[0]

var d = new Date();
orderTB(tb,0)
alert("改进前:"+(new Date()-d))

var d = new Date();
orderTB2(tb,1)
alert("改进后:"+(new Date()-d))

//-->
</SCRIPT>
</body>
fason 2003-07-06
  • 打赏
  • 举报
回复
比我的方法快很多,佩服!
emu 2003-07-06
  • 打赏
  • 举报
回复
<body>
<TABLE><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR><TR><TD>1</TD><TD>5</TD></TR><TR><TD>2</TD><TD>4</TD></TR><TR><TD>3</TD><TD>3</TD></TR><TR><TD>4</TD><TD>2</TD></TR><TR><TD>5</TD><TD>1</TD></TR></TABLE>

<SCRIPT LANGUAGE="JavaScript">
<!--
function orderTB(objTB,index){
for(var i=1;i<(objTB.rows.length-1);i++){
for(var j=i+1;j<objTB.rows.length;j++){
if(parseFloat(objTB.rows[j].cells[index].innerText)>parseFloat(objTB.rows[i].cells[index].innerText)){
objTB.moveRow(j,i);
}
}
}
}
function orderTB2(objTB,index){
var ar=[];
var rows = objTB.rows
for (var i=0;i<rows.length;i++) ar[i]=[rows[i].cells[index].innerText,rows[i].cloneNode(true)];
ar.sort(function(a,b){return a[0]-b[0]});
for (var i=rows.length-1;i>=0;i--) objTB.deleteRow(i);
for (var i=0;i<ar.length;i++)
objTB.firstChild.insertBefore(ar[i][1]);
}
var tb = document.getElementsByTagName("TABLE")[0]

var d = new Date();
orderTB(tb,0)
alert("改进前:"+(new Date()-d))

var d = new Date();
orderTB2(tb,1)
alert("改进后:"+(new Date()-d))

//-->
</SCRIPT>
</body>
yougu110 2003-07-06
  • 打赏
  • 举报
回复
up
leaxin 2003-07-06
  • 打赏
  • 举报
回复
fason(阿信) 你认为我的效率是低在tb.moveRow(i,j)上吗?
还有,我想问一下array.sort(compare)是不是不适合用于像tb.rows这样的数组的?
goodname 2003-07-05
  • 打赏
  • 举报
回复
不丢脸
你的问题,在下压跟不懂你的问题,嘿嘿,丢脸得在这里呢。
leaxin 2003-07-05
  • 打赏
  • 举报
回复
惨了,我好像觉得很丢脸的样子
是不是这样的问题根本就不值一提呢
leaxin 2003-07-05
  • 打赏
  • 举报
回复
fason(阿信)
要怎能么用啊,给过例子好吗
fason 2003-07-05
  • 打赏
  • 举报
回复
arr.sort(compare)

87,988

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧