javascript Array.sort() 跨瀏覽器下需要考慮的問(wèn)題


圖1:數(shù)組左邊的數(shù)字表示它初始化時(shí)候的順序
思考了一下,我和組里另外一個(gè)成員分別給出了自己的解決方法,他的意見(jiàn)是通過(guò)自己實(shí)現(xiàn)具體的sort算法來(lái)統(tǒng)一控制,鑒于網(wǎng)上的現(xiàn)成的排序算法很多并且排序算法是程序員的基礎(chǔ),這種方式實(shí)現(xiàn)起來(lái)并不復(fù)雜,唯一的工作就是代碼的實(shí)現(xiàn)。不過(guò)我認(rèn)為其實(shí)有更簡(jiǎn)單的方法,因?yàn)槲覀兊臄?shù)據(jù)是基于XSLT從xml中解析出來(lái)的,而XSLT是知道每行數(shù)據(jù)的的序號(hào)的(當(dāng)然如果是由服務(wù)器端代碼從數(shù)據(jù)庫(kù)或webservice讀取一樣很容易取該值),所以我認(rèn)為可以在XSLT中給每列添加一個(gè)Index屬性,e.g.第一行Index=1,第二行Index=2...這樣在sort比較大小的時(shí)候如果發(fā)現(xiàn)兩個(gè)數(shù)值相同,則比較其行號(hào),這樣最終只需要在在比較函數(shù)中添加兩行代碼即可實(shí)現(xiàn)。下面是實(shí)現(xiàn)代碼和結(jié)果截圖:
var array = [
{Index:1,val:25},
{Index:2,val:25},
{Index:3,val:45},
{Index:4,val:78}];
array.sort(function(a, b) {
if (a.val === b.val) {
//此處兩值相同,則根據(jù)其行號(hào)(初始化時(shí)的索引值)進(jìn)行比較。
return a.Index - b.Index;
}
return a.val - b.val;
})
for (var i = 0; i < array.length; i++) {
document.write("<p>" + array[i].Index + ":" + array[i].val + "</p>");
}
更新后結(jié)果截圖:


當(dāng)然這只是解決方法之一,我的目的只是盡量減少我們需要維護(hù)的代碼量,這樣可以盡量減少bug。一個(gè)思路,希望對(duì)你有所幫助。
相關(guān)文章
微信小程序自定義純凈模態(tài)框(彈出框)的實(shí)例代碼
這篇文章主要介紹了微信小程序自定義純凈模態(tài)框(彈出框)的實(shí)例代碼,代碼簡(jiǎn)答易懂,非常不錯(cuò),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
asp(javascript)全角半角轉(zhuǎn)換代碼 dbc2sbc
asp與javascript 全角半角處理代碼2009-08-08
JavaScript 事件對(duì)象的實(shí)現(xiàn)
前我寫過(guò)一篇關(guān)于JavaScript如何實(shí)現(xiàn)面向?qū)ο缶幊痰奈恼?。今天,我寫這篇文章跟大家討論一下,如何實(shí)現(xiàn)事件。2009-07-07
ES6?class類實(shí)現(xiàn)繼承實(shí)例詳解
傳統(tǒng)的javascript中只有對(duì)象,沒(méi)有類的概念,下面這篇文章主要給大家介紹了關(guān)于ES6?class類實(shí)現(xiàn)繼承的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
JS中的public和private對(duì)象,即static修飾符
先看下面的例子,它將告訴我們?cè)贘S世界中也有C#里的public , private ,及static等2012-01-01

