我嘗試了一些我在SO上找到的正則表達式排序,但我認爲它們可能不喜歡流中的+符號進行排序。 所以我得到看起來像這樣的(3至30個字母「+」 0到64000號)當數字相同時,保留字母順序的流的數字排序
userString = "AAA+800|BBB+700|CCC+600|ZZZ+500|YYY+400|XXX+300|XXA+300|XXZ+300";
輸出需要在格式的數據流:
array[0] = "XXA+300" // 300 being the lowest num and XXA being before XXX
array[...]
array[7] = "AAA+800"
我希望從最低的數字到最高的數字進行排序並反轉。 這是我低效的代碼。循環8x8次。 (我的流可能有200個項目)
它可以工作,但看起來很亂。有人可以幫我改進它,所以它使用更少的迭代?
var array = userString.split('|');
array.sort();
for(var i=0; i<len; i++) { // array2 contains just the numbers
bits = array[i].split('+');
array2[i] = bits[1];
}
array2.sort();
if(sort_order==2)
array2.reverse();
var c=0;
for(var a=0;a<len;a++) { // loop for creating array3 (the output)
for(var i=0; i<len ; i++) { // loop thru array to find matching score
bits = array[i].split('+');
if(bits[1] == array2[a]) { // found matching score
array3[c++] = bits[0]+'+'+bits[1]; // add to array3
array[i]='z+z'; // so cant rematch array position
}
}
}
array = array3;
親切的問候
嗨,呃倒過來,因爲數字是相反的,但阿爾法依然保持有序。其實我得到這個錯誤:對象800沒有方法'localeCompare' – ChrisAdmin 2011-12-27 09:57:08
什麼瀏覽器?這個錯誤表明你在一個不是字符串的對象上調用'localeCompare'。像任何其他錯誤一樣調試它。確保'userArr','aLetters'和'bLetters'包含你期望他們每次迭代的內容。如果他們不這樣做,找出原因。 如果你想讓數字反轉,只需將'return aLetters.localeCompare ...'改爲'return -aLetters.localeCompare ...'。進一步閱讀:[(1)](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/localeCompare)[(2)](https://developer.mozilla.org/en/JavaScript /參考/ Global_Objects /陣列/排序)。 – 2011-12-29 09:46:18
@Jordan,在電話上鍵入帖子?無論是英雄還是癮君子:-) – Kos 2011-12-29 09:59:09