
정리할 내용은 배열의 원소를 순회하는 메서드들이다. 1. forEach( ) 간단한 사용례는 다음과 같다. Array 메서드 forEach 는 콜백 함수(callback function)를 인자로 받는다. 그리고 배열의 각 원소의 값이 콜백 함수의 인자로 넘겨져 처리된다. 위 코드의 실행 결과를 콘솔에서 확인하면 다음과 같다. 마지막 행을 눈여겨 보길 바란다. forEach 나 map 은 원래의 배열을 변화시키지 않는다. 궁금한 점이 생겼다. 위에서 forEach 에 넘겨지는 콜백은 원소의 값을 다룬다고 했는데... 만약 인덱스를 다루고 싶다면 어떻게 해야하나? forEach 에 넘겨지는 콜백은 최대 3 개의 인자를 다룰 수 있다. 일단 원소의 값과 원소의 인덱스를 넘긴 경우를 보자. forEach 에 ..

자바스크립트는 C\C++ 처럼 container 가 세분화되어 있지 않다. 예를 양방향으로 원소가 추가되고 빼낼 수 있는 deque 같은 자료구조가 따로 제공되지 않고 배열이 이를 대신한다. 시간과 관련된 성능 문제는 잘 모르겠고, 하여간 이런 사정으로 원소 추가와 제거 관련된 메서드만 해도 엄청 많다. 먼저 index 를 이용하여 제거하는 것부터 시작하자. 1. delete '배열의 3 번째 항을 제거해줘!' delete arr[3]; 여기까진 쉽다. 기억해야할 것은 지금부터다. delete 는 배열에서만 사용될까? 직전 글의 마지막에서 javascript 배열의 인덱스는 일종의 객체 속성임을 말했다. 이제는 짐작 가능하겠지만 delete 는 객체에서 속성을 제거할 때 사용되는 것이다. 또한 속성을 제..

자바 스크립트에서는 primitive type 을 제외하면 모두 object 임을 말한 바 있다. 배열(array)은 primitive type 이 아니므로 object 이다. 미리 정의된 많은 메서드가 제공되는 built-in object 이다. 어라! 근데 아직 object 가 뭔지 얘기하지 않은 것 같은데? object 는 key, value 쌍들을 중괄호 { } 로 감싼것이다!? const obj ={ key1 : value1, ... keyn : valuen }; 뭔가 허전하지만 일단 배열 얘기를 하던 중이니 배열로 돌아간다. 빈 배열을 미리 만들어 놓고 쓰는 일은 흔하다. const numbers=[] // const numbers = new Array(); 위와 같은 코드 배열의 원소를 몇 ..

명시적인 형변환은 크게 문제될 것이 없다. 알아보는 것도 사용하는 것도 쉽다. 기본적으로 생성자를 이용하여 형변환을 할 수 있고 추가적인 방법들이 있다. 1. String 으로 임의의 타입에 대해 .toString 메서드를 쓰거나 String 생성자를 사용하면 스트링으로 변환된다. 앞서 number를 string 으로 바꿀 때 주의가 필요하다고 언급한 바 있다. 첫 줄에서 . (dot)을 소숫점인지 메서드 호출인지 구분하지 못하고 있음을 확인하게 된다. 생성자나 toString 으로 형변환은 여기까지... 이번에는 암시적(Implicit)으로 형변환이 일어나는 경우다. string 과 + 연산자가 만나면 전체가 string 으로 바뀐다. 2. Number 로 생성자를 이용하는 것은 건너 뛰고 바로 암시적..

1. 주의 사항 앞서 자바스크립트는 Wrapper Object 를 통해서 literal 들이 메서드를 호출할 수 있게 해 준다고 언급한 바 있다. 그런데 Number 의 경우 주의를 기울여야 한다. 위의 첫 코드가 에러를 발생시킨다. 그 이유를 문제없이 실행된 10.1.toString(); 과 비교하면 짐작할 수 있다. 자바스크립트 파서가 ' . '(dot) 이 소숫점을 나타내는 역할인지 아니면 메서드 호출인지 구별해내지 못했던 것이다. 그렇다면 10 은 어떻게 toString 을 호출해야 할까? 아는 대로 세 가지 방법을 소개한다. 자바스크립트를 포함해서 대부분의 언어에서 수를 다룰 때, let a=2.; let b=.7; 처럼 허전한(?) 표현을 허용한다. 위의 10..toString() 은 10. ..

1. Template Literal ES6 에서 도입된 template literals 은 치환, 확장이 가능한 문자열이다. 예제를 통해 기억해 두자. ` (back tick 혹은 grave accent) 로 감싼 문자열 내부에서는 shell 처럼 ${ } 를 이용해서 확장이 가능하다. $ 을 템플릿 리터럴에서 표현하고 싶으면 이스케이프 시키면 된다. `\${mathtrauma}` 템플릿 리터럴은 여러 행에 걸친 문장을 표현할 때도 직관적으로 사용할 수 있다. 세 개의 행을 출력해보자. 작은 따옴표나 큰 따옴표로 감싼 경우에 //console.log('line 1\nline 2\nline 3'); console.log('line 1\n'+ 'line 2\n'+ 'line 3'); 로 해야한다. 주석 처리..

1. 참조(Reference) 참조라는 용어는 많은 경우 pointer 와 대립되는 개념으로 쓰는 것 같다. 여기서 굳이 메모리 구조나 포인터를 공부할 이유는 없으니 그냥 다음의 사항만 외우자. JavaScript 에서 reference 는 오직 object type 에서만 발생한다. 다음 코드를 보자. 결과는 x 출력은 여전히 1 이고 y 출력은 2 이다. 이 경우 y 는 x 를 이용했지만 값을 사용했을 뿐 두 변수는 별개의 것이다. 여기서 1 이 Number Type 즉 primitive type 임을 명심하자. 이번에는 object 를 가지고 비슷한 작업을 해보자. 결과를 확인해보면 a 의 name 역시 'math'로 바뀌어 있음을 확인할 수 있다. if(a===b) console.log('Refe..

1. Data Types Javascript 에는 7 종류의 data type 이 있다고 한다. - String - Number - Boolean - Undefined - Null - Symbol 위의 6 가지를 primitive data types 으로 두고 나머지는 모두 -Object 타입이 된다. 타입 이름을 외우는 것이 중요한 것은 아니다. 기억해야 할 중요한 질문은 따로 있다. 왜 primitive 와 non-primitive 를 구분해야 하는가? Reference 의 결과가 달라지기 때문이다. pointer 를 사용하지 않고 reference 만을 사용하는 언어들에서 타입에 따라 변수를 다르게 처리하는 메카니즘이 작동한다. 다음 글에서 중점적으로 정리한다. 타입을 확인할 때는 typeof op..
- Total
- Today
- Yesterday
- persistent segment tree
- stack
- 정수론
- Vim
- Shell Programming
- math font
- Dijkstra
- number theory
- lazy propagation
- bash script
- Reference
- fenwick tree
- 세그먼트 트리
- Aho-Corasick
- 다익스트라
- map
- max flow
- nearest common ancestor
- javascript array
- segment tree
- JavaScript
- script
- C++ big number
- shell
- 백준
- python3
- RUBY
- BOJ
- dynamic programming
- bash
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |