[JavaScript] Array.prototype.sort()

rsuubinnยท2023๋…„ 2์›” 15์ผ
0

JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
10/10
post-thumbnail

๐Ÿ“š Array.prototype.sort() ํŠน์ง•

โญ๏ธ ๋ฐฐ์—ด ์ž์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋‹ˆ ์ฃผ์˜ํ•˜์ž!

let arr = ['a', 'c', 'd', 'e', 'b'];
arr.sort();
console.log(arr); // ['a', 'b', 'c', 'd', 'e']

๋ฌธ์ž์—ด ์ •๋ ฌ ์‹œ, ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ด ์ •๋ ฌ์ด ์ž˜ ๋œ๋‹ค

let arr = [27, 8, 5, 13];
arr.sort();
console.log(arr); // [13, 27, 5, 8]

์ •๋ ฌํ•  ๋•Œ ์š”์†Œ๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ทจ๊ธ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ์š”์†Œ ๋งจ ์•ž์˜ ์ˆซ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ์ด ๋œ๋‹ค
ํ•˜์ง€๋งŒ ์ด๊ฑด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์ •๋ ฌ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹ˆ๋‹ค ๐Ÿฅฒ

์ด ๋•Œ ํ•„์š”ํ•œ๊ฑด sort() ์ธ์ˆ˜๋กœ ์ •๋ ฌ ๋กœ์ง์„ ๋‹ด์€ ํ•จ์ˆ˜๋ฅผ ๋ฐ›๋Š”๋‹ค

let arr = [27, 8, 5, 13];
arr.sort((a, b) => {
  return a - b;
});
console.log(arr); // [5, 8, 13, 17]

compareFunction

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

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

๋”ฐ๋ผ์„œ compare ํ•จ์ˆ˜์˜ ํ˜•์‹์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

function compare(a, b){
  if (a๊ฐ€ b๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ) {
    return -1; // 0๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ, a๋ฅผ b๋ณด๋‹ค ๋‚ฎ์€ ์ธ๋ฑ์Šค๋กœ ์ •๋ ฌ
  }
  if (a๊ฐ€ b๋ณด๋‹ค ํด ๊ฒฝ์šฐ) {
    return 1; // 0๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ, b๋ฅผ a๋ณด๋‹ค ๋‚ฎ์€ ์ธ๋ฑ์Šค๋กœ ์ •๋ ฌ
  }
  if (a์™€ b๊ฐ€ ๋™์ผํ•  ๊ฒฝ์šฐ) {
    return 0;
  }
let arr = [27, 8, 5, 13];
arr.sort((a, b) => {
console.log(a, b);
return a - b;
});
console.log(arr); // [5, 8, 13, 27]

  • a = 8 b = 27์ธ ๊ฒฝ์šฐ, 8 - 27 < 0 ์ด๊ธฐ ๋•Œ๋ฌธ์— 8๋ฅผ 27 ๋ณด๋‹ค ๋‚ฎ์€ ์ธ๋ฑ์Šค๋กœ ์ •๋ ฌ [8, 27, 5, 13]
  • a = 5 b = 8์ธ ๊ฒฝ์šฐ, 5 - 8 < 0 ์ด๊ธฐ ๋•Œ๋ฌธ์— 5๋ฅผ 8๋ณด๋‹ค ๋‚ฎ์€ ์ธ๋ฑ์Šค๋กœ ์ •๋ ฌ [5, 8, 27, 13]
  • a = 13 b = 5์ธ ๊ฒฝ์šฐ, 13 - 5 > 0 ์ด๊ธฐ ๋•Œ๋ฌธ์— 5๋ฅผ 13๋ณด๋‹ค ๋‚ฎ์€ ์ธ๋ฑ์Šค๋กœ ์ •๋ ฌํ•˜์ง€๋งŒ ์ด๋ฏธ ๊ทธ๋ ‡๊ฒŒ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์„œ ํŒจ์Šค [5, 8, 27, 13]
  • a = 13 b = 8์ธ ๊ฒฝ์šฐ, 13 - 8 > 0 ์ด๊ธฐ ๋•Œ๋ฌธ์— 8๋ฅผ 13๋ณด๋‹ค ๋‚ฎ์€ ์ธ๋ฑ์Šค๋กœ ์ •๋ ฌํ•˜์ง€๋งŒ ์ด๋ฏธ ๊ทธ๋ ‡๊ฒŒ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์„œ ํŒจ์Šค [5, 8, 27, 13]
  • a = 13 b = 27์ธ ๊ฒฝ์šฐ, 13 - 27 < 0 ์ด๊ธฐ ๋•Œ๋ฌธ์— 13์„ 27๋ณด๋‹ค ๋‚ฎ์€ ์ธ๋ฑ์Šค๋กœ ์ •๋ ฌ [5, 8, 13, 27]
profile
@rsuubinn

0๊ฐœ์˜ ๋Œ“๊ธ€