見http://jsfiddle.net/rJe2U/1/
var desc = true,
weight_index = [],
table_matrics = [1, 2, 3],
tb=document.getElementById('tb'),
rowsCollection=tb.rows,
rows=[];
try{
rows=Array.prototype.slice.call(rowsCollection,0);
}catch(e){
for(var i=0,l=rowsCollection.length;i<l;i++){
rows.push(rowsCollection[i]);
}
}
table_matrics.sort(function(a, b){
var weight;
if(a == b){
weight = 0;
}else{
weight = (desc ? a > b : a < b) ? -1 : 1;
}
weight_index.push(weight);
if(weight>0){
tb.insertBefore(rows[b-1], rows[a-1])
}else if(weight<0){
tb.insertBefore(rows[a-1], rows[b-1])
}
return weight;
});
據http://jsperf.com/sorting-table-rows-with-known-row-weight,性能41000 OPS /秒(12300 OPS/300毫秒),所以這是一個有點比你的代碼運行得更快。
編輯:
上面的代碼可以簡化(http://jsfiddle.net/rJe2U/2/):
var desc = true,
weight_index = [],
table_matrics = [1, 2, 3],
tb=document.getElementById('tb'),
rows=[];
try{
rows=Array.prototype.slice.call(tb.rows,0);
}catch(e){
for(var i=0,rowsCollection=tb.rows,l=rowsCollection.length;i<l;i++){
rows.push(rowsCollection[i]);
}
}
table_matrics.sort(function(a, b){
var weight;
if(a == b){
weight = 0;
}else{
if(desc ? a > b : a < b){
weight=-1;
tb.insertBefore(rows[a-1], rows[b-1]);
}else{
weight=1;
tb.insertBefore(rows[b-1], rows[a-1]);
}
}
weight_index.push(weight);
return weight;
});
而且你不需要weight_index
,所以可以刪除(http://jsfiddle.net/rJe2U/3/):
var desc = true,
table_matrics = [1, 2, 3],
tb=document.getElementById('tb'),
rows=[];
try{
rows=Array.prototype.slice.call(tb.rows,0);
}catch(e){
for(var i=0,rowsCollection=tb.rows,l=rowsCollection.length;i<l;i++){
rows.push(rowsCollection[i]);
}
}
table_matrics.sort(function(a, b){
var weight;
if(a == b){
return 0;
}
if(desc ? a > b : a < b){
tb.insertBefore(rows[a-1], rows[b-1]);
return -1;
}
tb.insertBefore(rows[b-1], rows[a-1]);
return 1;
});
的表現似乎並沒有改善(http://jsperf.com/sorting-table-rows-with-known-row-weight/3),但我認爲無線將會有大量的行。
我不明白'weight_index'的作用。 – Oriol
如果您想要按降序排列數組[1,2,3],則需要移動第一個元素-1和第二個元素-1,以獲得'[3,2,1] '。 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort – Gajus
但我不明白。如果它返回'-1',第一個元素的索引比第二個索引要低。然後,用'[-1,-1]',數組'[1,2,3]'保持不變,而不是相反。 – Oriol