프로그래머스 최댓값 만들기(1) 자바스크립트 | Array.prototype.sort()

Chaeyeon Lee·2023년 5월 19일
0

🔅 1. 아이디어

문제 자체는 쉽다.

🧑‍💻 2. 내 코드

function solution(numbers) {
    numbers.sort((a,b)=>b-a);
    return numbers[0]*numbers[1];
}

🐣 3. 개념

📌 Array.prototype.sort()

위 메서드는 배열을 정렬하고 해당 배열을 반환한다. 기본 정렬 순서는 문자열의 유니코드를 따른다. 원본 배열을 정렬한다!!

arr.sort([compareFunction])

compareFunction(opt): 정렬 순서를 정의하는 함수. 이 값이 생략되면, 배열의 요소들은 문자열로 취급 되어 유니코드 값 순서대로 정렬된다!!!

(1) compareFunction(a, b)이 리턴하는 값이 0보다 작은 경우, a를 b보다 낮은 색인으로 정렬. 즉, a가 먼저 옴.
(2) compareFunction(a, b)이 리턴하는 값이 0인 경우, a와 b를 서로에 대해 변경하지 않고 모든 다른 요소에 대해 정렬.
(3) compareFunction(a, b)이 리턴하는 값이 0보다 큰 경우, b를 a보다 낮은 인덱스로 정렬. 즉, b가 먼저 옴.

sort를 사용하면서 어려웠던 점은, 웃기게도 오름차순/내림차순을 맨날 헷갈린다는 것.

오름차순: 수가 커짐!! 12345
내림차순: 수가 작아짐!!!!! 54321

function compareNumbers(a, b) {
  return a - b; //오름차순 정렬
}
function compareNumbers(a, b) {
  return b - a; //내림차순 정렬
}

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
  return a - b;
});
console.log(numbers);
// [1, 2, 3, 4, 5]

const arr = [2, 1, 3, 10];
arr.sort(); //비교함수가 입력되지 않으면 문자열로 취급되어 유니코드를 따른다. 
console.log(arr);
//[1, 10, 2, 3] =>유니코드 순서에 따라 정렬됨!!

//--------------------------------------------------
const arr1 = [2, 1, 3];
const arr2 = arr1.sort();
console.log(arr1); //원본배열도 바꾼다!!
// [1, 2, 3]
console.log(arr2); 
// [1, 2, 3]

arr1.push(4);
console.log(arr1); 
// [1, 2, 3, 4]
console.log(arr2); //arr2는 arr1을 가리키고 있기 때문에 arr1에 새로운 요소 4를 추가하여도 arr2에도 추가됨!!!
// [1, 2, 3, 4]

객체도 정렬할 수 있다. 개짱짱

var items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 },
  { name: 'The', value: -12 },
  { name: 'Magnetic', value: 13 },
  { name: 'Zeros', value: 37 }
];

// value 기준으로 정렬
items.sort(function (a, b) {
  if (a.value > b.value) {
    return 1;
  }
  if (a.value < b.value) {
    return -1;
  }
  // a must be equal to b
  return 0;
});

// name 기준으로 정렬
items.sort(function(a, b) {
  var nameA = a.name.toUpperCase(); // 대소문자 구분 없이 정렬하기 위함!!!
  var nameB = b.name.toUpperCase(); 
  if (nameA < nameB) {
    return -1;
  }
  if (nameA > nameB) {
    return 1;
  }

  // 이름이 같을 경우
  return 0;
});


출처
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
https://hianna.tistory.com/409

profile
프론트엔드 개발자 지망생

0개의 댓글