sort()?
배열의 원소들을 콜백함수의 결과에 따라 정렬해 주는 매서드
예를 들어, [1,4,2,3,5]라는 배열을 오름차순으로 정렬해 [1,2,3,4,5] 혹은 내림차순으로 [5,4,3,2,1] 이런 식으로 정리할 수 있다. 특징으로는 원본배열 자체를 정렬해 버리 때문에 원본이 변경되는 걸 원하지 않는 경우엔 배열을 복사 후 사용해야 한다.
구문
sort()
sort(compareFn)
compareFn 은 정렬 순서를 정해주는 함수로, 매개변수 a와 b를 갖고는데, a는 비교할 첫 번째 원소, b는 비교할 두 번째 원소다.
compareFn 내부에서 a와 b를 비교해서 음수, 0, 양수를 리턴해주면
음수일 경우 b를 앞으로, 0일 경우는 그대로, 양수일 경우 a를 앞으로 리턴해준다.
이를 이용해 리턴값을 a-b 혹은 b-a로 내보내 오름차순 혹은 내림차순 정렬이 가능하다.
+추가로, for문 등으로 별도의 정렬 알고리즘을 사용하는 것보다 sort() 매서드를 사용하는 것이 대부분의 경우에 더 빠르다.
(데이터의 형태를 파악하고 최적의 알고리즘을 사용할 자신이 없다면 sort() 대체로 빠름)
기본 사용법
기본적으로 오름차순으로 정렬을 하게 된다.
const numberArr = [3,2,1,4,5,7,6,8];
numberArr.sort(); //기본값은 오름차순 정렬
//[1, 2, 3, 4, 5, 6, 7, 8]
numberArr.sort((a,b) => a-b); // a에서 b를 뺀 값을 리턴한다.
//[1, 2, 3, 4, 5, 6, 7, 8]
numberArr.sort((a,b) => b-a); // b에서 a를 뺀 값을 리턴한다.
//[8, 7, 6, 5, 4, 3, 2, 1]
//- - -
const charArr = ["c","C","B","b","a","하","바","마"];
charArr.sort(); //기본값은 오름차순 정렬
//['B', 'C', 'a', 'b', 'c', '마', '바', '하']
charArr.sort((a,b) => a-b); // 문자열은 빼기가 안되므로 수식이 적용하지 못함.
//["c","C","B","b","a","하","바","마"]
charArr.sort((a,b) => b-a); // 문자열은 빼기가 안되므로 수식이 적용하지 못함.
//["c","C","B","b","a","하","바","마"]
// * charCodeAt() 매서드로 문자를 유니코드로 변환하여 비교가 가능하다.
주의 1. 원소를 문자열로 변경 후 비교
배열의 원소를 문자열로 변경해서 비교하기 때문에, 의도치 않은 결과가 생길 수 있다.
let arr = [14, 2, 43, 31, 7];
arr.sort();
//[14, 2, 31, 43, 7]
// 제일 앞 문자를 기준으로 오름차순 해버림
arr.sort((a,b) = a-b);
// [2, 7, 14, 31, 43]
//a-b로 숫자형으로 변환되어 제대로 정렬
많이 실수하는 부분이므로 주의해서 사용하자.
주의 2. 원본 배열을 변경함
또, 위에서도 말했지만 원본배열이 변경된다.
const a = [5,4,3,2,1]
const b = a.sort();
console.log(a);
//[1, 2, 3, 4, 5]
console.log(b);
//[1, 2, 3, 4, 5]
이게 싫다면 아래와 같이 간단하게 배열을 복사해서 사용하자.
const a = [5,4,3,2,1]
const b = [...a].sort();
console.log(a);
//[5, 4, 3, 2, 1]
console.log(b);
//[1, 2, 3, 4, 5]
사용예제 - 간단한 문자열 오름차순/내림차순 정렬
const fruitList = ["pineApple", "apple", "orange", "banana"];
//1. 오름차순
fruitList.sort();
//['apple', 'banana', 'orange', 'pineApple']
//2. 내림차순
// sort() 이후 reverse()매서드를 이용해서 뒤집어준다.
fruitList.sort().reverse();
//['pineApple', 'orange', 'banana', 'apple']
사용예제 - 객체로 이루어진 배열에서 특정값으로 비교
const userData = [
{ name: "c", age: 24 },
{ name: "a", age: 24 },
{ name: "b", age: 27 }
]
// 나이순으로 오름차순 정렬
userData.sort((a,b) => {
return a.age - b.age;
})
/*
[
{ "name": "c", "age": 24 },
{ "name": "a", "age": 24 },
{ "name": "b", "age": 27 }
]
*/
사용예제 - 객체로 이루어진 배열에서 특정값으로 비교 / 같을 경우 두 번째 비교값 지정
const userData = [
{ name: "c", age: 24 },
{ name: "a", age: 24 },
{ name: "b", age: 27 }
]
// 나이순으로 오름차순 정렬하고, 나이가 같으면 이름 오름차순으로 정렬
userData.sort((a,b) => {
if(a.age === b.age){
return a.name.charCodeAt() - b.name.charCodeAt() // charCodeAt() 매서드로 유니코드로 변환
}else{
return a.age - b.age;
}
})
/*
[
{ "name": "a", "age": 24 },
{ "name": "c", "age": 24 },
{ "name": "b", "age": 27 }
]
*/
// 나이순으로 내림차순 정렬하고, 나이가 같으면 이름 오름차순으로 정렬
userData.sort((a,b) => {
if(a.age === b.age){
return a.name.charCodeAt() - b.name.charCodeAt() // charCodeAt() 매서드로 유니코드로 변환
}else{
return b.age - a.age;
}
})
/*
[
{ "name": "b", "age": 27 },
{ "name": "a", "age": 24 },
{ "name": "c", "age": 24 },
]
*/
Array.prototype.sort() - JavaScript | MDN
The sort() method sorts the elements of an array in place and returns the reference to the same array, now sorted. The default sort order is ascending, built upon converting the elements into strings, then comparing their sequences of UTF-16 code units val
developer.mozilla.org
sort()?
배열의 원소들을 콜백함수의 결과에 따라 정렬해 주는 매서드
예를 들어, [1,4,2,3,5]라는 배열을 오름차순으로 정렬해 [1,2,3,4,5] 혹은 내림차순으로 [5,4,3,2,1] 이런 식으로 정리할 수 있다. 특징으로는 원본배열 자체를 정렬해 버리 때문에 원본이 변경되는 걸 원하지 않는 경우엔 배열을 복사 후 사용해야 한다.
구문
sort()
sort(compareFn)
compareFn 은 정렬 순서를 정해주는 함수로, 매개변수 a와 b를 갖고는데, a는 비교할 첫 번째 원소, b는 비교할 두 번째 원소다.
compareFn 내부에서 a와 b를 비교해서 음수, 0, 양수를 리턴해주면
음수일 경우 b를 앞으로, 0일 경우는 그대로, 양수일 경우 a를 앞으로 리턴해준다.
이를 이용해 리턴값을 a-b 혹은 b-a로 내보내 오름차순 혹은 내림차순 정렬이 가능하다.
+추가로, for문 등으로 별도의 정렬 알고리즘을 사용하는 것보다 sort() 매서드를 사용하는 것이 대부분의 경우에 더 빠르다.
(데이터의 형태를 파악하고 최적의 알고리즘을 사용할 자신이 없다면 sort() 대체로 빠름)
기본 사용법
기본적으로 오름차순으로 정렬을 하게 된다.
const numberArr = [3,2,1,4,5,7,6,8];
numberArr.sort(); //기본값은 오름차순 정렬
//[1, 2, 3, 4, 5, 6, 7, 8]
numberArr.sort((a,b) => a-b); // a에서 b를 뺀 값을 리턴한다.
//[1, 2, 3, 4, 5, 6, 7, 8]
numberArr.sort((a,b) => b-a); // b에서 a를 뺀 값을 리턴한다.
//[8, 7, 6, 5, 4, 3, 2, 1]
//- - -
const charArr = ["c","C","B","b","a","하","바","마"];
charArr.sort(); //기본값은 오름차순 정렬
//['B', 'C', 'a', 'b', 'c', '마', '바', '하']
charArr.sort((a,b) => a-b); // 문자열은 빼기가 안되므로 수식이 적용하지 못함.
//["c","C","B","b","a","하","바","마"]
charArr.sort((a,b) => b-a); // 문자열은 빼기가 안되므로 수식이 적용하지 못함.
//["c","C","B","b","a","하","바","마"]
// * charCodeAt() 매서드로 문자를 유니코드로 변환하여 비교가 가능하다.
주의 1. 원소를 문자열로 변경 후 비교
배열의 원소를 문자열로 변경해서 비교하기 때문에, 의도치 않은 결과가 생길 수 있다.
let arr = [14, 2, 43, 31, 7];
arr.sort();
//[14, 2, 31, 43, 7]
// 제일 앞 문자를 기준으로 오름차순 해버림
arr.sort((a,b) = a-b);
// [2, 7, 14, 31, 43]
//a-b로 숫자형으로 변환되어 제대로 정렬
많이 실수하는 부분이므로 주의해서 사용하자.
주의 2. 원본 배열을 변경함
또, 위에서도 말했지만 원본배열이 변경된다.
const a = [5,4,3,2,1]
const b = a.sort();
console.log(a);
//[1, 2, 3, 4, 5]
console.log(b);
//[1, 2, 3, 4, 5]
이게 싫다면 아래와 같이 간단하게 배열을 복사해서 사용하자.
const a = [5,4,3,2,1]
const b = [...a].sort();
console.log(a);
//[5, 4, 3, 2, 1]
console.log(b);
//[1, 2, 3, 4, 5]
사용예제 - 간단한 문자열 오름차순/내림차순 정렬
const fruitList = ["pineApple", "apple", "orange", "banana"];
//1. 오름차순
fruitList.sort();
//['apple', 'banana', 'orange', 'pineApple']
//2. 내림차순
// sort() 이후 reverse()매서드를 이용해서 뒤집어준다.
fruitList.sort().reverse();
//['pineApple', 'orange', 'banana', 'apple']
사용예제 - 객체로 이루어진 배열에서 특정값으로 비교
const userData = [
{ name: "c", age: 24 },
{ name: "a", age: 24 },
{ name: "b", age: 27 }
]
// 나이순으로 오름차순 정렬
userData.sort((a,b) => {
return a.age - b.age;
})
/*
[
{ "name": "c", "age": 24 },
{ "name": "a", "age": 24 },
{ "name": "b", "age": 27 }
]
*/
사용예제 - 객체로 이루어진 배열에서 특정값으로 비교 / 같을 경우 두 번째 비교값 지정
const userData = [
{ name: "c", age: 24 },
{ name: "a", age: 24 },
{ name: "b", age: 27 }
]
// 나이순으로 오름차순 정렬하고, 나이가 같으면 이름 오름차순으로 정렬
userData.sort((a,b) => {
if(a.age === b.age){
return a.name.charCodeAt() - b.name.charCodeAt() // charCodeAt() 매서드로 유니코드로 변환
}else{
return a.age - b.age;
}
})
/*
[
{ "name": "a", "age": 24 },
{ "name": "c", "age": 24 },
{ "name": "b", "age": 27 }
]
*/
// 나이순으로 내림차순 정렬하고, 나이가 같으면 이름 오름차순으로 정렬
userData.sort((a,b) => {
if(a.age === b.age){
return a.name.charCodeAt() - b.name.charCodeAt() // charCodeAt() 매서드로 유니코드로 변환
}else{
return b.age - a.age;
}
})
/*
[
{ "name": "b", "age": 27 },
{ "name": "a", "age": 24 },
{ "name": "c", "age": 24 },
]
*/
Array.prototype.sort() - JavaScript | MDN
The sort() method sorts the elements of an array in place and returns the reference to the same array, now sorted. The default sort order is ascending, built upon converting the elements into strings, then comparing their sequences of UTF-16 code units val
developer.mozilla.org