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...

7,263 Responses

  1. Normannok表示:

    canada rx drugs online recommended canadian pharmacies canadian pharmacies not requiring prescription

  2. qmlqzurf表示:

    modafinil pill modafinil us provigil tablet

  3. Normannok表示:

    india pharmacy india pharmacies online cheap generic drugs from india

  4. Dpwiqh表示:

    purchase fildena generic – stromectol buy canada ivermectin 2ml

  5. Normannok表示:

    stromectol 3 mg tablets price buy stromectol online buy stromectol online

  6. Normannok表示:

    buy stromectol online prescribing stromectol stromectol price usa

  7. RogerHal表示:

    generic propecia for cheap without precscription propecia prescription propecia drug

  8. Pyfobi表示:

    cephalexin 125mg price – buy cephalexin 250mg without prescription erythromycin 250mg brand

  9. RogerHal表示:

    how can i order prescription drugs without a doctor prescription drugs without doctor approval buy prescription drugs online

  10. RogerHal表示:

    dog antibiotics without vet prescription canadian online drugstore pain meds without written prescription

  11. RogerHal表示:

    drug finasteride where to buy propecia online buy propecia

  12. RogerHal表示:

    propecia pills fincar propecia women

  13. Upshpf表示:

    order bactrim – trimethoprim without prescription cost sildenafil 150mg

  14. RogerHal表示:

    best ed treatment top rated ed pills what is the best ed pill

  15. RogerHal表示:

    ed prescription drugs prescription drugs without prior prescription comfortis without vet prescription

  16. Cfqclu表示:

    buy augmentin 375mg sale – overnight delivery cialis female cialis cvs

  17. Jeffreymak表示:

    buy ed pills ed pills that really work best over the counter ed pills

  18. Jeffreymak表示:

    ivermectin pour on for humans stromectol ireland ivermectin for fleas

  19. Jeffreymak表示:

    ed medications over the counter best ed medication online ed drugs

  20. Clandm表示:

    oral prednisolone 40mg – tadalafil 5mg drug order tadalafil 40mg for sale

  21. Jeffreymak表示:

    ivermectin 0.5% brand name ivermectin pills amazon ivermectin tablets 6 mg

  22. Jeffreymak表示:

    heartgard ivermectin ivermectin for mini pigs how to use ivermectin for humans

  23. Jeffreymak表示:

    buy prednisone 40 mg buy prednisone prednisone online paypal

  24. Jeffreymak表示:

    ivermectin walgreens ivermectin egg withdrawal stromectol stay active

  25. Xzamvi表示:

    order sildenafil 100mg pills – generic sildenafil 50mg sildenafil 50mg tablet

  26. Jeffreymak表示:

    stromectol online canada ivermectin 3 mg tablet bret weinstein ivermectin

  27. The very root of your writing whilst sounding reasonable in the beginning, did not work well with me after some time. Somewhere within the paragraphs you actually managed to make me a believer but just for a while. I nevertheless have a problem with your jumps in assumptions and you would do well to help fill in those breaks. If you can accomplish that, I would undoubtedly be amazed.

  28. I’m not sure where you’re getting your information, but good topic.
    I needs to spend some time learning more or understanding more.

    Thanks for fantastic information I was looking for this information for
    my mission.

發佈留言

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