일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- slick slider 간격
- SafeArea 커스텀
- input 숫자입력
- 타입스크립트
- JS
- 프론트앤드
- RN navitate push
- 트윈맥스 기초
- 임고미
- reactnative 웹뷰 페이지 로딩
- react native safeArea
- styled component
- styled component 작동 안될때
- scrollIntoView scrollTo
- React-Native 공부
- gsap
- 리액트
- React Native navigation
- react
- 퍼블리셔
- styled component 작동안함
- 웹뷰 페이지 로딩
- React Native SafeArea Custom
- rn webview page loading
- safari wiondow.open
- js 특정 위치로 이동
- gsap 기초
- React-Native IOS
- react이론
- styled component is not working
Archives
- Today
- Total
개발공부 임고미
[Javascript] sort() : 내림차순 / 오름차순 본문
728x90
300x250
arr.sort([compareFunction]) |
반환 : 정렬한 배열. 원 배열이 정렬되는 것에 유의하세요. 복사본이 만들어지는 것이 아닙니다.
compareFunction :
정렬 순서를 정의하는 함수. 생략하면 배열은 각 요소의 문자열 변환에 따라 각 문자의 유니 코드 코드 포인트 값에 따라 정렬됩니다.
1.숫자 정렬
var number = [ 100, 30, 35, 110, 25, 73, 10 ];
var numberString = [ "100", "30", "35", "110", "25", "73", "10"];
function compare ( a , b ) { return a - b; }
number.sort ( compare );(O)
numberString.sort ( compare );(O)
2. 문자와 숫자 정렬
1) 가나다 순
var korean = [ "퍼블리셔", "디자이너", "개발자", "프론트앤드" ];
var english = [ "publisher", "designer", "developer", "frontend"];
var all = [ "publisher","퍼블리셔", "디자이너", "designer", "developer","개발자", "frontend", "프론트앤드"];
var number = [ 100, 30, 35, 110, 25, 73, 10 ];
var numberString = [ "100", "30", "35", "110", "25", "73", "10"];
//가나다 순
function ascending ( a , b ) { return ( a < b ) ? -1 : ( a == b ) ? 0 : 1; }
/*
function ascending ( a , b ) {
if ( a < b ) return -1;
else if ( a == b ) return 0;
else return 1;
}
*/
//역순
function descending ( a , b ) { return ( b < a ) ? -1 : ( b == a ) ? 0 : 1; }
korean.sort ( ascending ); (O)
english.sort ( ascending ); (O)
number.sort ( ascending ); (O)
stringNumber.sort ( ascending ); (X)
따라서 문자인 숫자는 1번의 식으로 사용
2) 알파벳 순 ( 대소문자 상관 없음)
다 소문자로 만들어서, 대소문자가 상관없는것임
var korean = [ "퍼블리셔", "디자이너", "개발자", "프론트앤드" ];
var english = [ "publisher", "designer", "developer", "frontend"];
var all = [ "publisher","퍼블리셔", "디자이너", "designer", "developer","개발자", "frontend", "프론트앤드"];
// 대소문자 무시 ( toLowerCase )
function ascending ( a , b ) {
var a = a.toString().toLowerCase();
var b = b.toString().toLowerCase();
return ( a < b ) ? -1 : ( a == b ) ? 0 : 1;
}
//역순
function descending ( a , b ) {
var a = a.toString().toLowerCase();
var b = b.toString().toLowerCase();
return ( b < a ) ? -1 : ( b == a ) ? 0 : 1;
}
korean.sort ( ascending ); (O)
english.sort ( ascending ); (O)
all.sort ( ascending ); (O)
number.sort ( ascending ); (O)
3. 사용자 언어 기준
var korean = [ "퍼블리셔", "디자이너", "개발자", "프론트앤드" ];
var english = [ "publisher", "designer", "developer", "frontend"];
var all = [ "publisher","퍼블리셔", "디자이너", "designer", "developer","개발자", "frontend", "프론트앤드"];
// 로컬에 따라 ( localeCompare ) - 언어에 따라, 결과가 다를 수 있음.
function ascending ( a , b ) {
var a = a.toString();
var b = b.toString();
return a.localeCompare ( b );
}
//역순
function descending ( a , b ) {
var a = a.toString();
var b = b.toString();
return b.localeCompare ( a );
}
korean.sort ( ascending ); (O)
english.sort ( ascending ); (O)
all.sort ( ascending ); (O)
number.sort ( ascending ); (O)
point
all배열을 sort() 했을때,
local에서 한글을 사용하고 있으므로,
1) 사용자 언어기준으로 ( 한글 → 영문)
결과값 : (8) ["개발자", "디자이너", "퍼블리셔", "프론트앤드", "designer", "developer", "frontend", "publisher"]
2) 이 외의 기준으로 ( 영문→ 한글 )
결과값 : (8) ["designer", "developer", "frontend", "publisher", "개발자", "디자이너", "퍼블리셔", "프론트앤드"]
4. 숫자가 포함된 문자열
var overall = [ "tistory 100", "tistory 25", "tistory 5", "tistory 40", "tistory 1" ];
function ascending ( a , b ) {
if ( ! isNaN( a ) && ! isNaN( b ) ) return a - b;
var a = a.toString();
var b = b.toString();
return ( a < b ) ? -1 : ( a == b ) ? 0 : 1; // 또는, return a.localeCompare ( b );
}
//역순
function descending ( a , b ) {
if ( ! isNaN( a ) && ! isNaN( b ) ) return b - a;
var a = a.toString();
var b = b.toString();
return ( b < a ) ? -1 : ( b == a ) ? 0 : 1; // 또는, return b.localeCompare ( a );
}
overall.sort ( ascending ); (O)
5. Object 정렬
위에 함수들을 활용하면 쉽게 할 수 있습니다. 간단한 응용입니다!
var products = [
{
id: 'apple',
name: '사과',
amount: 10,
},
{
id: 'banana',
name: '바나나',
amount: 1,
},
{
id: 'orange',
name: '오렌지',
amount: 3,
},
{
id: 'avocado',
name: '아보카도',
amount: 9,
}
];
name순, (가나다 순)
products.sort(function(a, b) { // 오름차순
return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
});
결과 :
- 0: {id: "banana", name: "바나나", amount: 1}
- 1: {id: "apple", name: "사과", amount: 10}
- 2: {id: "avocado", name: "아보카도", amount: 9}
- 3: {id: "orange", name: "오렌지", amount: 3}
amount순 ( 숫자 순)
var sortingField = "amount";
products1.sort(function(a, b) { // 오름차순
return a[sortingField] - b[sortingField];
// return a["amount"] - b["amount"];
});
tip : 객체값을 선택하는 방법 중 하나 a["찾고자하는 key"] (문자로 넣어줘야합니다~!)
결과:
- 0: {id: "banana", name: "바나나", amount: 1}
- 1: {id: "orange", name: "오렌지", amount: 3}
- 2: {id: "avocado", name: "아보카도", amount: 9}
- 3: {id: "apple", name: "사과", amount: 10}
6. map을 사용한 정렬
compareFunction은 배열 내의 요소마다 여러 번 호출될 수 있습니다. 이러한 compareFunction의 성질에 따라, 높은 오버헤드가 발생할 수도 있습니다. compareFunction이 복잡해지고, 정렬할 요소가 많아질 경우, map을 사용한 정렬을 고려해보는 것이 좋습니다. 이 방법은 임시 배열을 하나 만들어서 여기에 실제 정렬에 사용할 값만을 뽑아서 넣어서 이를 정렬하고, 그 결과를 이용해서 실제 정렬을 하는 것입니다.
// 소트 할 배열
var list = ['Delta', 'alpha', 'CHARLIE', 'bravo'];
// 임시 배열은 위치 및 정렬 값이있는 객체를 보유합니다.
var mapped = list.map(function(el, i) {
return { index: i, value: el.toLowerCase() };
})
// 축소 치를 포함한 매핑 된 배열의 소트
mapped.sort(function(a, b) {
return +(a.value > b.value) || +(a.value === b.value) - 1;
});
// 결과 순서를 위한 컨테이너
var result = mapped.map(function(el){
return list[el.index];
});
참고: tonks.tistory.com/124 / developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
728x90
300x250
'퍼블리싱 > html css js' 카테고리의 다른 글
[Javascript] includes() / startsWith() / endsWith() (0) | 2020.09.25 |
---|---|
[Javascript] find() / findIndex() / filter() (0) | 2020.09.24 |
[Javascript] 반복문 for / forEach / map (0) | 2020.09.24 |
[React / Js] 다음 우편번호 ie 버그 / 상세주소 입력 안될때 (0) | 2020.09.22 |
[Javascript] swiper 크기만큼 이동시켜주기 (2) | 2020.09.21 |
Comments