문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
function solution(strings, n) {
strings.sort((a, b) => {
if (a[n] === b[n]) {
// 문자열 비교 == 사전순 비교
if (a > b) return 1
else if (a < b) return -1
} else {
return a.charCodeAt(n) - b.charCodeAt(n)
}
})
return strings
}
sort()
함수를 사용하여 정렬 순서를 정의하는 함수를 사용했다.
compareFunction
이 제공되면 배열 요소는 compare 함수의 반환 값에 따라 정렬됩니다.
// 오름차순으로 정렬
array.sort((a, b) => a - b)
array.sort((a, b) => b - a)
객체의 속성 중 하나의 값을 기준으로 정렬할 수 있다.
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;
});
문자열에 비교 연산자 (<
, >
)를 사용하면 두 문자열을 '사전 순서'대로 비교한다. (문자열의 ASCII 값을 비교)
('apple' > 'banana'); // false
('apple' > 'abcd'); // true
('apple' > 'a'); //true
('apple' > 'Banana'); // true
('apple' > '1'); // true
function solution(strings, n) {
// n 번째 문자열 비교
return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}
localeCampare()
localeCompare()
메서드는 참조 문자열이 정렬 순으로 지정된 문자열 앞 혹은 뒤에 오는지 또는 동일한 문자열인지 나타내는 수치를 반환합니다.
referenceStr.localeCampare(compareString)
compareString 전에 referenceStr가 위치하는 경우 음수, compareString 후에 referenceStr가 위치하는 경우 양수, 동등할 경우 0이 됩니다.
function solution(strings, n) {
return strings.sort((a, b) => {
const chr1 = a.charAt(n);
const chr2 = b.charAt(n);
if (chr1 == chr2) {
return (a > b) - (a < b);
} else {
return (chr1 > chr2) - (chr1 < chr2);
}
})
}
sort에 인자로 전달된 함수는 문자열 비교구문을 사용하여 bool값을 연산한 값을 리턴한다. (a > b의 구문은 true, false의 bool값으로 평가됨)