Link Search Menu Expand Document

Array Sort

Table of contents

  1. Sorting Array Elements Basic
    1. Sorting an Array
      1. sort()
    2. Reversing an Array
      1. reverse()
  2. Sorting Array Elements Technics (Numeric Sort)
    1. The Compare Function
    2. Sorting Ascending
    3. Sorting Descending
    4. Sorting Random Order
    5. The Fisher Yates Method
    6. Find the Highest (or Lowest) Array Value
      1. Basic Sorting
      2. My Min / Max JavaScript Methods
      3. max() or min()
  3. Sorting Object Arrays
    1. Numeric Sorting
    2. Alphabetic Sorting

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

arr.sort();

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

arr.reverse();

<p id="demo"></p>

<script>
// Create and display an array:
var fruits = ["Banana", "Orange", "Apple", "Mango"]

function myFunction(){
  fruits.sort();            // First sort the array
  fruits.reverse();         // Then reverse it:
  
  document.getElementById("demo").innerHTML = fruits;
}

myFunction();
</script>

W3School


Sorting Array Elements Technics (Numeric Sort)

기본으로 the sort() 함수는 값을 문자열로 정렬

→ 숫자는 첫 번째 숫자의 오름차순으로 정렬해 25보다 100이 먼저 정렬됨

▸ 해결법 : 함수이용(compare funtion)

The Compare Function

비교 함수의 목적은 대체 정렬 순서를 정의하는 것

▸ 비교 함수는 인수에 따라 음수, 0 또는 양수 값을 반환

syntax

function(a, b){return a - b}

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

Sorting Ascending

예제

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

Sorting Descending

예제

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

Sorting Random Order

▸ 무작위지만 우선순위가 있음

▸ Fisher Yates Shuffle 방법을 더 선호해서 사용 (뒤에 설명되어 있음)

예제

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

The Fisher Yates Method

위의 무작위 배열에서 사용하는 array.sort() 방법이 정확하지 않아서(우선순위가 있음) Fisher Yates Shuffle 이라는 방법을 자주 씀

예제

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

<script>
var points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;  

function myFunction() {
var i, j, k;
  for (i = points.length -1; i > 0; i--) {
    j = Math.floor(Math.random() * i)
    k = points[i]
    points[i] = points[j]
    points[j] = k
  }
  document.getElementById("demo").innerHTML = points;
}
</script>

W3School

Find the Highest (or Lowest) Array Value

배열에서는 최대 값이나 최소 값을 찾기 위한 내장함수가 없어서 값을 찾기 위한 세가지 방법이 있음

Basic Sorting

오름 or 내림차순으로 정렬한 첫 번째나 마지막번째가 highest or lowest value

  1. 최소값 찾기

    예제

     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. 최대값 찾기

    예제

     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. 최소값 찾기

    예제

     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. 최대값 찾기

    예제

     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

    Math.max.apply() : 배열에서 가장 높은 숫자를 찾는 데 사용

     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

    Math.min.apply() : 배열에서 가장 낮은 숫자를 찾는 데 사용

     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

숫자 정렬

예제

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 + "<br>" +
  cars[1].type + " " + cars[1].year + "<br>" +
  cars[2].type + " " + cars[2].year;
}

W3School

Alphabetic Sorting

문자열 정렬

예제

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 + "<br>" +
  cars[1].type + " " + cars[1].year + "<br>" +
  cars[2].type + " " + cars[2].year;
}

W3School


이 웹사이트는 jekyll로 제작되었습니다. Patrick Marsceill, Distributed by an MIT license.