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

8,963 Responses

  1. ArnoldDRODA表示:

    Buy compounded semaglutide online: Semaglutide pharmacy price – rybelsus cost

  2. Сервисный центр предлагает мастер по ремонту электросамоката micar адреса ремонта электросамокатов micar

  3. тревожная сигнализация смета http://www.trevozhnaya-knopka-rosgvardii.ru .

  4. Cindy表示:

    This Is The Advanced Guide To Small American Fridge Freezers fridges american style; Cindy,

  5. Профессиональный сервисный центр по ремонту бытовой техники с выездом на дом.
    Мы предлагаем: сервис центры бытовой техники москва
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  6. стоимость кнопки тревожной сигнализации http://www.trevozhnaya-knopka-rosgvardii.ru/ .

  7. Gartandabsex表示:

    Как поднять настроение с помошью мемов. прикольные мемы
    http://www.dataload.com/forum/profile.php?mode=viewprofile&u=23087

  8. Isidra表示:

    What Is The Reason Ghost Immobiliser Price Is The Right Choice For You?

    ghost ii immobiliser (Isidra)

  9. Your blog post was like a crash course in [topic]. I feel like I learned more in five minutes than I have in months of studying.

  10. Профессиональный сервисный центр по ремонту компьютеров и ноутбуков в Москве.
    Мы предлагаем: ремонт и диагностика макбуков
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  11. 15 Replacement Upvc Window Handles Benefits That
    Everyone Should Be Able To repairing upvc windows

  12. I simply wished to thank you so much once again. I’m not certain the things that I would’ve undertaken in the absence of the entire advice shared by you concerning that topic. It had been a challenging scenario in my circumstances, however , witnessing a expert fashion you dealt with that made me to jump over delight. Now i am happier for this guidance and hope you know what a great job you’re putting in teaching other individuals via your blog. I’m certain you have never encountered any of us.

  13. Hi there, just became aware of your blog through Google, and found that it’s really informative. I¡¦m going to watch out for brussels. I will appreciate if you continue this in future. A lot of people will be benefited from your writing. Cheers!

  14. Sink leaking表示:

    Good post here. One thing I’d like to say is most professional areas consider the Bachelor’s Degree just as the entry level requirement for an online certification. Even though Associate Qualifications are a great way to begin with, completing the Bachelors starts up many opportunities to various jobs, there are numerous online Bachelor Diploma Programs available by institutions like The University of Phoenix, Intercontinental University Online and Kaplan. Another issue is that many brick and mortar institutions offer Online versions of their degree programs but generally for a drastically higher price than the providers that specialize in online degree programs.

  15. Hi there! This post could not be written any better! Looking through this article reminds me of my previous roommate! He constantly kept preaching about this. I most certainly will send this article to him. Fairly certain he will have a good read. Thanks for sharing!

  16. gas plumber表示:

    I am glad to be a visitor of this thoroughgoing website ! , appreciate it for this rare information! .

  17. Keep ‘em coming… you all do such a great job at such Concepts… can’t tell you how much I, for one appreciate all you do! —- Mobilier outdoor

  18. I would really love to guest post on your blog.~~“”

  19. You’re so cool! I do not suppose I have read something like this before. So good to discover somebody with some unique thoughts on this topic. Seriously.. thanks for starting this up. This site is something that’s needed on the internet, someone with a bit of originality.

  20. DanielGed表示:

    Официальный промокод мелбет при регистрации даёт возможность получить бонус на первый депозит в размере до 10400 рублей, либо фрибет 30EUR. Промокод проверен и актуален, работает только в офшорной версии бк Мелбет в 2024 году. Букмекерская контора Мелбет пользуется популярностью, славится щедростью, поскольку вознаграждает новых пользователей, впервые зарегистрировавших на портале, и постоянных беттеров. В большинстве случаев награды в виде промокодов – специальных комбинаций, требующих активации. Благодаря промокод на фрибет можно получить увеличенный бонус, главное – правильно использовать буквенно-цифровое сочетание. Бонус не является безвозмездным подарком от букмекера. Чтобы получить возможность вывода денежных средств, беттеру предстоит выполнить ряд условий. Что обеспечивает промокод в Мелбет, как активируют, доступные бонусы при регистрации на сегодня, условия и правила отыгрыша – подробно рассмотрим в обзоре.

  21. reprogram表示:

    Ten Bmw Key Replacement Myths That Don’t Always Hold
    reprogram

  22. 10 Reasons Why People Hate Glass Replacement.

    Glass Replacement Replacement Upvc Glass

  23. Сервисный центр предлагает ремонт экшен камеры eken на дому починить экшен камеры eken

發佈留言

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