Hello Ocean! ๐ŸŒผ

[VanillaJS] ๊ฐ์ฒด ์ •๋ ฌ ์–ด๋–ป๊ฒŒ ํ•˜์ง€? (feat. ๋ฌธ์ž์—ด) ๋ณธ๋ฌธ

Web

[VanillaJS] ๊ฐ์ฒด ์ •๋ ฌ ์–ด๋–ป๊ฒŒ ํ•˜์ง€? (feat. ๋ฌธ์ž์—ด)

bba_dda 2021. 8. 23. 21:46
๋ฐ˜์‘ํ˜•

๋ฐฐ์—ด์„ ์ •๋ ฌํ•  ๋•Œ๋Š”, 

Array.sort() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ์ •๋ ฌ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๊ฐ์ฒด๋ฅผ ์ •๋ ฌํ•  ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

๊ฐ์ฒด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ sort()๋ฅผ ์ด์šฉํ•˜๋Š”๋ฐ, ๋‚ด๋ถ€์— compareFunction์„ ์ •์˜ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

 

์˜ˆ๋ฅผ๋“ค์–ด, ageํ•„๋“œ๋ฅผ ๊ฐ€์ง„ ์•„๋ž˜ ๊ฐ์ฒด ๋ฐฐ์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

let objs = [ {age: 13}, {age: 43}, {age: 9}, {age: 40} ];

objs.sort(function(a,b) { // ์˜ค๋ฆ„์ฐจ์ˆœ
	return a.age - b.age;
}); 

objs.sort(function(a,b) { // ๋‚ด๋ฆผ์ฐจ์ˆœ
	return b.age - a.age;
});

 

C++๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š”, compareFunction์„ ์ •์˜ํ•  ๋•Œ, booleanํ˜•์‹์œผ๋กœ returnํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, JS์—์„œ๋Š” int๋กœ returnํ•ด์„œ ์‹ ๊ธฐํ–ˆ๋‹ค. 

 

์•„๋ž˜๋Š” ๊ณต์‹ ๋ฌธ์„œ์˜ ๊ด€๋ จ ๋‚ด์šฉ์ด๋‹ค.

compareFunction์ด ์ œ๊ณต๋˜๋ฉด ๋ฐฐ์—ด ์š”์†Œ๋Š” compare ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์— ๋”ฐ๋ผ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค. a์™€ b๊ฐ€ ๋น„๊ต๋˜๋Š” ๋‘ ์š”์†Œ๋ผ๋ฉด,

  • compareFunction(a, b) < 0 : a๋ฅผ b๋ณด๋‹ค ๋‚ฎ์€ ์ƒ‰์ธ์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. (a๊ฐ€ ๋จผ์ € ์˜ด)
  • compareFunction(a, b) == 0์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด a์™€ b๋ฅผ ์„œ๋กœ์— ๋Œ€ํ•ด ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ๋‹ค๋ฅธ ์š”์†Œ์— ๋Œ€ํ•ด ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. 
  • compareFunction(a, b) > 0 : b๋ฅผ a๋ณด๋‹ค ๋‚ฎ์€ ์ธ๋ฑ์Šค๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. (b๊ฐ€ ๋จผ์ € ์˜ด)

 

๊ทธ๋Ÿฐ๋ฐ, ๊ฐ์ฒด๋ฅผ ์ •๋ ฌํ•  ๋•Œ ๊ธฐ์ค€์ด ๋˜๋Š” ํ•„๋“œ๊ฐ€ string์ด๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

 

string์—์„œ๋„ -์—ฐ์‚ฐ์„ ์ง€์›ํ•ด์ฃผ์ง€ ์•Š์„๊นŒ? ํ•ด์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ์‹œ๋„ํ–ˆ๋Š”๋ฐ, compareFunction์˜ return๊ฐ’์ด NaN(Non a Number)๋กœ ๋‚˜์˜ค๋ฉด์„œ ์ •๋ ฌ์ด ๋˜์ง€ ์•Š์•˜๋‹ค. 

let objs = [ {age: "13"}, {age: "43"}, {age: "9"}, {age: "40"} ];

objs.sort(function(a,b) { // ์ •๋ ฌ x
	return a.age - b.age;
});

 

๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ, string์—์„œ ํฌ๊ธฐ๋น„๊ต ์—ฐ์‚ฐ์€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋”ฉํ•˜๋ฉด ๋œ๋‹ค. ๊ฐ’์ด ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ 0์„ returnํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋”ฐ๋กœ ๋นผ์ค˜๋„ ๋˜๊ณ , ์•ˆ ํ•ด์ค˜๋„ ์ƒ๊ด€ ์—†๋‹ค. 

let objs = [ {age: "13"}, {age: "43"}, {age: "9"}, {age: "40"} ];

objs.sort(function(a,b) { // ์˜ค๋ฆ„์ฐจ์ˆœ
    if (a.age > b.age) return 1;
    else if (a.age < b.age) return -1;
    else return 0;
});

objs.sort(function(a,b) { // ์˜ค๋ฆ„์ฐจ์ˆœ
    if (a.age > b.age) return 1;
    else (a.age < b.age) return -1;
});

 

์ฐธ๊ณ ๋กœ, string ๋ฐฐ์—ด ์ •๋ ฌ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

let arr = [ "12", "13", "20" ];

arr.sort() // ์˜ค๋ฆ„์ฐจ์ˆœ
arr.reverse() // ๋‚ด๋ฆผ์ฐจ์ˆœ
๋ฐ˜์‘ํ˜•