스택큐힙리스트
객체 배열에서 문자열 속성 값에 따라 정렬하십시오. 본문
저는 자바스크립트 객체 배열을 가지고 있습니다.
var objs = [
{ first_nom: 'Lazslo', last_nom: 'Jamf' },
{ first_nom: 'Pig', last_nom: 'Bodine' },
{ first_nom: 'Pirate', last_nom: 'Prentice' }
];
JavaScript에서 #$^&*! $! $&의 값을 기준으로 정렬하는 방법은 무엇인가요?
나는 sort(a,b) 에 대해 알고 있지만, 이는 문자열과 숫자에만 작동하는 것 같다. 내 객체에 toString() 메소드를 추가해야 할까?
답변 1
당신만의 비교 함수를 작성하는 것은 충분히 쉽습니다.
function compare( a, b ) {
if ( a.last_nom < b.last_nom ){
return -1;
}
if ( a.last_nom > b.last_nom ){
return 1;
}
return 0;
}
objs.sort( compare );
또는 인라인 ( c/o Marco Demaio ):
objs.sort((a,b) => (a.last_nom > b.last_nom) ? 1 : ((b.last_nom > a.last_nom) ? -1 : 0))
한국어로 번역해주세요.
숫자로 간단하게 ( c/o Andre Figueiredo ):
objs.sort((a,b) => a.last_nom - b.last_nom); // b - a for reverse sort
답변 2
배열의 객체를 문자열 속성값으로 정렬하는 방법
자바스크립트에서는 배열 내 자바스크립트 객체의 속성값을 기준으로 정렬하는 방법이 매우 쉽게 제공됩니다. 이를 사용해 보다 가독성 좋은 코드를 작성할 수 있습니다.
먼저 정렬하고자 하는 속성값이 포함된 객체 배열을 생성합니다. 그 다음 Array.sort() 메서드를 호출하고, 정렬에 사용될 비교 함수를 인자로 전달합니다. 이 함수는 각 객체의 속성값을 비교하여 정렬 기준을 결정합니다.
객체 배열을 문자열 속성값을 기준으로 정렬하는 경우, 비교 함수는 다음과 같이 작성할 수 있습니다.
```
function compare(a, b) {
const propertyA = a.stringProperty.toUpperCase();
const propertyB = b.stringProperty.toUpperCase();
let comparison = 0;
if (propertyA > propertyB) {
comparison = 1;
} else if (propertyA < propertyB) {
comparison = -1;
}
return comparison;
}
arrayOfObjects.sort(compare);
```
이 경우, 객체의 stringProperty 값을 대문자로 변환하여 비교합니다. 비교 결과가 양수일 경우 A 객체가 B 객체보다 우선순위가 높다고 간주되며, 음수일 경우 A 객체가 B 객체보다 우선순위가 낮다고 간주됩니다.
이렇게 작성된 비교 함수를 사용하여 객체 배열을 문자열 속성값으로 정렬할 수 있습니다. 정렬 결과를 활용하면 보다 직관적이고 가독성 좋은 코드를 작성할 수 있으므로, 이러한 기법을 적극 활용하는 것이 좋습니다.