作者zzpop (給我極品其餘免談)
看板Ajax
標題[問題] 請問 javascrip 字串與數字混合排序
時間Mon Jul 9 16:42:07 2012
各位大大午安
最近遇到一個很棘手的問題(我功力太弱)
就是字串和數字混合排序
還麻煩各位大大指點一下觀念
非常感謝了 T_T
範例如下:
$(function(){
var a = [];
a=[1,2,43,4,"61",66,7,"a490",5,3,77,7,777,80];
function aa(m,n){
return (m-n);
}
for(var i=0; i<a.length; i++){
if(Math.floor(a[i]/2)>= 0 || Math.floor(a[i]/2)< 0){
a[i] = +(a[i]);
}
else{
a[i] = a[i];
}
}
$("#span1").append(a.sort(aa)+",");
});
紅色的是我想要排序的陣列
預期的結果是:1,2,3,4,5,7,7,43,61,66,77,80,777,a490
用以上的寫法順利達成
(for迴圈是判斷是不是數字,不是的話就把字串轉成數字)
但是陣列內如果增加一個b,變成:
a=[1,2,43,4,"61",66,7,"a490",5,3,77,7,777,80,
"b"];
結果卻變成:
1,b,43,4,61,66,7,2,5,3,77,7,777,80,a490
亂七八糟了...T_T
不知道這種字串與數字混合且不規則的陣列
各位大大都是怎麼解決排序問題的呢?
苦惱好久...非常感謝啦 T_T
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.127.180.41
1F:→ kerash:Math.floor(a[i]/2)>= 0 || Math.floor(a[i]/2)< 0 07/09 17:04
2F:→ kerash:我想確認一下是不是我看錯... 這個條件式會不會怪怪的... 07/09 17:05
3F:→ kerash:同時滿足 大於等於小於 那應該就等於 true ? 07/09 17:05
4F:→ zzpop:不知道要怎樣判斷是否為數字,想說這樣不知道可不可以 T_T 07/09 17:10
5F:→ zzpop:本來有想要用Typtof="number"的方式,但對"61"又不適用了... 07/09 17:12
6F:→ zzpop:才會寫如果非數字字串除2會等於null,就不是數字的迴圈 @_@ 07/09 17:13
7F:→ kerash:可以用isNaN判斷是否為數字 07/09 17:17
8F:→ kerash:isNaN 如果是數字會回 false , 非數字回 true 07/09 17:18
9F:→ zzpop:謝謝大大,我來試試看 ^^ 07/09 17:20
11F:推 B9: 同頁有 js implementation,似乎是 zlib license 07/10 20:08