javascript

자바스크립트 sort()로직

ssund 2023. 4. 15. 11:40

Array.prototype.sort()

배열을 정렬하는 메소드.

기본 정렬 순서는 문자열 유니코드를 기준으로 한다. 

const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// Expected output: Array ["Dec", "Feb", "Jan", "March"]

const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// Expected output: Array [1, 100000, 21, 30, 4]

 

반환값은 새로운배열이 만들어지는게 아니라 원배열이 수정된다. 

 

정렬기준을 매개변수로 받아서 구현할 수 있다. 

 arr.sort([compareFunction])

 

숫자를 비교해서 정렬하는 compareFunction

(Infinity 및 NaN이 포함되어 있지 않은 경우)

let test = [1, 2, 3, 4, 11];

function compareNumbers(a, b) {
  return a - b;
}

test.sort(compareNumbers);
// 결과 [1, 2, 3, 4, 11]

 

sort 메소드는 함수식과 함께 편하게 사용할 수도 있다. 

var numbers = [1, 2, 3, 4, 11];
numbers.sort(function(a, b) {
  return a - b;
});
// 결과 [1, 2, 3, 4, 11]

 

객체 정렬하기 

객체 특정값 (value값으로 정렬하기)

var items = [
  { name: 'seonji', value: 13 },
  { 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: 'The', value: -12}, 
  {name: 'seonji', value: 13},
  {name: 'Magnetic', value: 13},
  {name: 'Edward', value: 21},
  {name: 'Sharpe', value: 37},
  {name: 'Zeros', value: 37},
  {name: 'And', value: 45}
]
*/

 

객체 name값으로 정렬하기 

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 }
];

// name 기준으로 정렬
items.sort(function(a, b) {
  var nameA = a.name.toUpperCase(); // ignore upper and lowercase
  var nameB = b.name.toUpperCase(); // ignore upper and lowercase
  if (nameA > nameB) {
    return 1;
  }
  if (nameA < nameB) {
    return -1;
  }

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

/*
결과
[
  {name: 'And', value: 45}, 
  {name: 'Edward', value: 21}, 
  {name: 'Magnetic', value: 13},
  {name: 'Sharpe', value: 37},
  {name: 'The', value: -12},
  {name: 'Zeros', value: 37},
]
*/

 

참고 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98