---
layout: default
title: Sort
parent: Arrays
grand_parent: JavaScript
nav_order: 3
---
# Array Sort
{: .no_toc .text-beta .fw-700}
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
## Sorting Array Elements Basic
### Sorting an Array
#### sort()
**method sorts an array alphabetically**
`sort()`함수는 두 개의 값을 비교하여, 상기 비교 함수 값을 전송하고, 반환(-, 0, +)의 값에 따른 값을 정렬
▸ 결과가 음수 이면 b 이전에 a 정렬
▸ 결과가 양수 이면 a 이전에 b 정렬
▸ 결과가 0이면 두 값의 정렬 순서가 변경되지 않음
▸ a-z순
▸ 숫자가 문자보다 먼저 정렬, 문자열인 숫자도 숫자로 이해해서 먼저정렬
▸ 전체 숫자값보다 첫 번째 숫자의 오름차순으로 정렬한다 ex) 23 6 abcd 이렇게
Syntax
{: .label .mt-2}
arr.sort();
```js
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
//fruits = Apple,Banana,Mango,Orange
```
### Reversing an Array
#### reverse()
**reverses the elements in an array**
▸ sort후 reverse하면 내림차순
Syntax
{: .label .mt-2}
arr.reverse();
```html
```
[W3School](https://www.w3schools.com/js/tryit.asp?filename=tryjs_array_sort_reverse){: .btn .btn-outline .mt-2}
---
## Sorting Array Elements Technics (Numeric Sort)
기본으로 the sort() 함수는 값을 문자열로 정렬
→ 숫자는 첫 번째 숫자의 오름차순으로 정렬해 25보다 100이 먼저 정렬됨
▸ 해결법 : 함수이용(compare funtion)
### The Compare Function
비교 함수의 목적은 대체 **정렬 순서를 정의하는 것**
▸ 비교 함수는 인수에 따라 음수, 0 또는 양수 값을 반환
syntax
{: .label .mt-2}
function(a, b){return a - b}
```js
var points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;
//Sort Alphabetically
function myFunction1() {
points.sort();
document.getElementById("demo").innerHTML = points;
}
//Sort Numerically
function myFunction2() {
points.sort(function(a, b){return a - b});
document.getElementById("demo").innerHTML = points;
}
```
[W3School](https://www.w3schools.com/js/tryit.asp?filename=tryjs_array_sort_alpha){: .btn .btn-outline .mt-2}
### Sorting Ascending
예제
{: .label .label-purple .mt-2}
```js
var points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;
function myFunction() {
points.sort(function(a, b){return a - b});
document.getElementById("demo").innerHTML = points;
}
```
[W3School](https://www.w3schools.com/js/tryit.asp?filename=tryjs_array_sort2){: .btn .btn-outline .mt-2}
### Sorting Descending
예제
{: .label .label-purple .mt-2}
```js
var points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;
function myFunction() {
points.sort(function(a, b){return b - a});
document.getElementById("demo").innerHTML = points;
}
```
[W3School](https://www.w3schools.com/js/tryit.asp?filename=tryjs_array_sort3){: .btn .btn-outline .mt-2}
### Sorting Random Order
▸ 무작위지만 우선순위가 있음
▸ Fisher Yates Shuffle 방법을 더 선호해서 사용 (뒤에 설명되어 있음)
예제
{: .label .label-purple .mt-2}
```js
var points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;
function myFunction() {
points.sort(function(a, b){return 0.5 - Math.random()});
document.getElementById("demo").innerHTML = points;
}
```
[W3School](https://www.w3schools.com/js/tryit.asp?filename=tryjs_array_sort_random){: .btn .btn-outline .mt-2}
### The Fisher Yates Method
위의 무작위 배열에서 사용하는 array.sort() 방법이 정확하지 않아서(우선순위가 있음) Fisher Yates Shuffle 이라는 방법을 자주 씀
예제
{: .label .label-purple .mt-2}
```html
```
[W3School](https://www.w3schools.com/js/tryit.asp?filename=tryjs_array_sort_random2){: .btn .btn-outline .mt-2}
### Find the Highest (or Lowest) Array Value
배열에서는 최대 값이나 최소 값을 찾기 위한 내장함수가 없어서 값을 찾기 위한 세가지 방법이 있음
#### Basic Sorting
**오름 or 내림차순으로 정렬한 첫 번째나 마지막번째가 highest or lowest value**
1. [최소값 찾기](https://www.w3schools.com/js/tryit.asp?filename=tryjs_array_sort_low)
예제
{: .label .label-purple .mt-2}
```js
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a-b});
document.getElementById("demo").innerHTML = points[0];
//result is 1
```
2. [최대값 찾기](https://www.w3schools.com/js/tryit.asp?filename=tryjs_array_sort_high)
예제
{: .label .label-purple .mt-2}
```js
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b-a});
document.getElementById("demo").innerHTML = points[0];
//result is 100
```
#### My Min / Max JavaScript Methods
**직접 함수(메소드)를 만들어서 사용 (가장 빠른방법)**
1. [최소값 찾기](https://www.w3schools.com/js/tryit.asp?filename=tryjs_array_sort_min)
예제
{: .label .label-purple .mt-2}
```js
var points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = myArrayMin(points);
function myArrayMin(arr) {
var len = arr.length;
var min = Infinity;
while (len--) {
if (arr[len] < min) {
min = arr[len];
}
}
return min;
}
```
2. [최대값 찾기](https://www.w3schools.com/js/tryit.asp?filename=tryjs_array_sort_max)
예제
{: .label .label-purple .mt-2}
```js
var points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = myArrayMax(points);
function myArrayMax(arr) {
var len = arr.length;
var max = -Infinity;
while (len--) {
if (arr[len] > max) {
max = arr[len];
}
}
return max;
}
```
#### max() or min()
최대나 최소값 하나만 원하면 위 두가지 방법은 정말 비효율적임
★ max() or min() 사용하는게 효율적
1. [Math.max() on an Array](https://www.w3schools.com/js/tryit.asp?filename=tryjs_array_sort_math_max)
Math.max.apply() : 배열에서 가장 높은 숫자를 찾는 데 사용
```js
var points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = myArrayMax(points);
function myArrayMax(arr) {
return Math.max.apply(null, arr);
or
Math.max(1, 2, 3) //이경우 매개변수에 배열이 들어가면 안됨, toString이나 join 써도 안됨ㅠ
}
```
2. [Math.min() on an Array](https://www.w3schools.com/js/tryit.asp?filename=tryjs_array_sort_math_min)
Math.min.apply() : 배열에서 가장 낮은 숫자를 찾는 데 사용
```js
var points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = myArrayMin(points);
function myArrayMin(arr) {
return Math.min.apply(null, arr);
or
Math.min(1, 2, 3) //이경우에도 매개변수에 배열이 들어가면 안됨, toString이나 join 써도 안됨
}
```
---
## Sorting Object Arrays
배열에 포함된 객체를 정렬할 때 사용
### Numeric Sorting
숫자 정렬
예제
{: .label .label-purple .mt-2}
```js
var cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}
];
displayCars();
function myFunction() {
cars.sort(function(a, b){return a.year - b.year});
displayCars();
}
function displayCars() {
document.getElementById("demo").innerHTML =
cars[0].type + " " + cars[0].year + " " +
cars[1].type + " " + cars[1].year + " " +
cars[2].type + " " + cars[2].year;
}
```
[W3School](https://www.w3schools.com/js/tryit.asp?filename=tryjs_array_sort_object1){: .btn .btn-outline .mt-2}
### Alphabetic Sorting
문자열 정렬
예제
{: .label .label-purple .mt-2}
```js
var cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}
];
displayCars();
function myFunction() {
cars.sort(function(a, b){
var x = a.type.toLowerCase();
var y = b.type.toLowerCase();
if (x < y) {return -1;} //마이너스면 앞으로 정렬
if (x > y) {return 1;} //플러스면 뒤로 정렬 – 그래서 알파벳이 클수록 앞으로감
return 0;
});
displayCars();
}
function displayCars() {
document.getElementById("demo").innerHTML =
cars[0].type + " " + cars[0].year + " " +
cars[1].type + " " + cars[1].year + " " +
cars[2].type + " " + cars[2].year;
}
```
[W3School](https://www.w3schools.com/js/tryit.asp?filename=tryjs_array_sort_object2){: .btn .btn-outline .mt-2}