JS 陣列排序範例

馬老師離開待了約十幾年的教學界,目前在外商科技公司擔任Senior Consultant的工作,原因當然很多,未來有空再慢慢發文章分享,剛好最近有點時間,怕以後忘記,把最近專案中用到的一些程式筆記下來,如果大家有需要,也可以參考使用,這一篇是關於Javascript陣列排序的部分。

通常若有較多的內容需要儲存,變數就沒有陣列來的好用,所以陣列是拿來儲存大量的資料時所使用的,且儲存在裡面的資料,還可以選擇經過排序之後再呈現至畫面上,例如:

var name = ["stanley", "jack", "anita" , "mary"];

name.sort() //依照字母排序
console.log(name); // 輸出 ["anita", "jack", "mary", "stanley"]

names.reverse() //反轉陣列內容
console.log(name); //輸出 ["stanley", "mary", "jack", "anita"]

但若我們同時有多個陣列,但希望以其中之一的內容排序時,也可以同步更新到另外一個陣列,該如何處理呢?可以參考以下的方式:

var name = ["stanley", "jack", "anita" , "mary"];
var gender = ["male" , "male" , "female" , "female"];
var score = [30, 10, 40 , 80];
var ID = ["S1" , "S2" , "S3" , "S4"];

console.log("name : " + name + "; score : " + score + "; gender : " + gender + "; ID : " + ID);
/*
排序前
name : stanley,jack,anita,mary;
score : 30,10,40,80;
gender : male,male,female,female;
ID : S1,S2,S3,S4;
*/

var list = [];
for (var i = 0; i < name.length; i++){
  list.push({
    'name': name[i],
    'score': score[i],
    'gender': gender[i],
    'ID': ID[i]
  });
}

list.sort(function(a, b) {
  return ((a.name < b.name) ? -1 : ((a.name == b.name) ? 0 : 1));
});

for (var i = 0; i < list.length; i++) {
  name[i] = list[i].name;
  score[i] = list[i].score;
  gender[i] = list[i].gender;
  ID[i] = list[i].ID;
}

console.log("name : " + name + "; score : " + score + "; gender : " + gender + "; ID : " + ID);
/*
排序後
name : anita,jack,mary,stanley;
score : 40,10,80,30;
gender : female,male,female,male;
ID : S3,S2,S4,S1;
*/

若是希望按照分數排序,則可以將sort function 修改為下:

//score 由小到大
list.sort(function(a, b) {
  return a.score - b.score
});

//score 由大到小
list.sort(function(a, b) {
  return b.score - a.score
});

補充:

上述的排序內容均以英文和數字為主,若是遇到中文可使用localeCompare進行,而排序的方式是漢語拼音順序,以下為範例:

var arr = ["二","五","四","一","三"];
//漢語拼音:一[yi], 二[er], 三[san], 四[si], 五[wu]
console.log("排序前:" + arr); // 排序前:二,五,四,一,三
arr.sort(function(a,b){
	return a.localeCompare(b, 'zh'); //排序後:二,三,四,五,一
});
console.log("排序後:" + arr); 

var arr = ["中文","英語","法國話", "京片子", "中國"];
//中文[zhong wen], 英語[ying yu], 法國話[fa guo hua], 京片子[jing pian zi], 中國[zhong guo]
console.log("排序前:" + arr); //排序前:中文,英語,法國話,京片子,中國
arr.sort(function(a,b){
	return a.localeCompare(b, 'zh');
});
console.log("排序後:" + arr); //排序後:法國話,京片子,英語,中國,中文


var arr = ["中文","英语","法国话", "京片子", "中国"];
console.log("排序前:" + arr); //排序前:中文,英语,法国话,京片子,中国
arr.sort(function(a,b){
	return a.localeCompare(b, 'zh');
});
console.log("排序後:" + arr); //排序後:法国话,京片子,英语,中国,中文

You may also like...

6,990 Responses

  1. как зарабатывать деньги в интернете как зарабатывать деньги в интернете .

  2. Your place is valueble for me. Thanks!? This web site is mostly a walk-through for the entire information you wanted about this and didn know who to ask. Glimpse right here, and also you l undoubtedly discover it.

  3. RandallSluro表示:

    kms auto

  4. RobertWap表示:

    Убрать квартиру после трупа http://uborka-posle-umershego-moskva.ru/

  5. I’m impressed, I have to admit. Genuinely rarely can i encounter a weblog that’s both educative and entertaining, and without a doubt, you could have hit the nail around the head. Your concept is outstanding; the catch is an issue that too few persons are speaking intelligently about. I am happy we found this inside my hunt for some thing relating to this.

  6. Lovely blog! I am loving it!! Will come back again. I am bookmarking your feeds also

  7. i can take for granted you are an expert on this subject

  8. I have to show my respect for your kindness in support of persons who should have help with this situation. Your very own commitment to getting the message around became rather advantageous and have regularly made men and women just like me to achieve their objectives. Your own warm and friendly key points means a great deal to me and extremely more to my office colleagues. Best wishes; from each one of us.

  9. Im no pro, but I believe you just crafted the best point. You definitely fully understand what youre talking about, and I can seriously get behind that. Thanks for staying so upfront and so honest.

  10. Heya I’m for the first time here. I came across this board and I find It truly useful & it helped me out a lot. I hope to give something back and help others like you aided me.

  11. It’s difficult to acquire knowledgeable folks within this topic, however you be understood as there’s more you are discussing! Thanks

  12. MichaelTaipt表示:

    Уборка после канализации http://uborka-posle-zatopleniya-moskva.ru/

  13. Wow!, this was a top quality post. In theory I’d like to write like this too – taking time and real effort to make a good article… but what can I say… I procrastinate a lot and never seem to achieve anything

  14. Cazrmse表示:

    Купить диплом о среднем образовании в Москве и любом другом городе
    pedolymp.ru/common/articles/kak_legalno_kupit_diplom_v_2023_godu_sovetu_i_rekomendacii

  15. You can also put a chatbox on your blog for more interactivity among readers.”‘.’*

  16. I can’t appear to locate your contact us page, I really think you need to make your website layout more straightforward to navigate via. who else agrees?

  17. Whats up, I’m ranking high for “free justin bieber stuff”.

  18. i think that plasma tvs are more expensive than LCD tvs and they are a bit heavier too’

  19. MarioNub表示:

    разработка и создание сайта цена продвижение сайтов москва

  20. sitemap.xml表示:

    Hello there! This iis my ffirst comment hee sso I jhst wanted to give a
    quicck shou oout annd sayy I really enjoy reading through your blpog posts.
    Caan yyou recommend any other blogs/websites/forums tuat cocer
    the same subjects? Maany thanks!

  21. Good read , I’m going to spend more time learning about this subject

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。