TypeScript

    숫자 세 자리마다 콤마 찍기

    let value = 12523401.515; let str = value.toLocaleString(); // '12,523,401.515' Number 타입의 내장 함수인 toLocaleString 함수를 통해 세 자리마다 콤마를 찍는 표기방식을 적용한 string 값을 얻을 수 있다. let value = 12523401.515.toFixed(2); // '12523401.52' let str = value.toLocaleString(); // '12523401.52' 문제는 toFixed 함수(소수점 표시 제한)를 거친 뒤 toLocaleString 함수를 실행하면 세 자리마다 콤마를 찍지 않는다. 왜냐하면 toFixed로 인해 value의 타입이 string으로 바뀌었고, string의 내장 함..

    Key와 Value 쌍의 컬렉션

    Key와 Value 쌍의 컬렉션

    1. 사용자 정의 타입 컬렉션 (Object) let elixirLevels: {[heroLevel: number]: number} = {}; elixirLevels[1] = 10; elixirLevels[2] = 20; elixirLevels[3] = 30; 가장 간단하게 Key와 Value 쌍으로 이뤄진 컬렉션은 위와 같이 만들 수 있다. 이러한 타입은 Object라고 한다. key값은 string과 number(enum number도 가능)만 사용할 수 있으며 value는 제약이 없다. 컬렉션에 원소 추가, 삭제, 검색 등의 함수들은 본인이 따로 만드는 것이 아닌 이상 존재하지 않으며, 이 Object의 key와 value에 접근할 수 있는 함수들은 ObjectConstructor에 존재한다. le..

    순환 참조

    순환 참조

    옛날에 C++ 공부할 때 경험했던 순환 참조는 위와 같이 두 개의 헤더 파일이 서로를 include 했을 때 발생하는 문제였다. 이런 경우에는 주로 헤더파일 include 없이 참조하려는 클래스를 전방 선언하는 방법으로 해결했다. 최근에 타입스크립트에서도 비슷한 문제를 겪게 되었다. A-Script.ts import { B } from "B-Script"; export class A {} class Main { nodeA: A; constructor() { this.nodeA = new B(); } } B-Script.ts import { A } from "A-Script"; export class B extends A {} 이러한 구조에서 컴파일을 하니 코코스 크리에이터 에디터에서 아래와 같은 에러가 ..

    아주 심플한 가중치 랜덤 뽑기

    아주 심플한 가중치 랜덤 뽑기

    어떤 상자를 열면 A, B, C, D, E 다섯 개의 아이템 중 하나가 나온다. 그리고 이 다섯 개의 아이템이 나올 확률이 각각 다르다면 대부분은 이것을 테이블화시킬 것이다. 하지만 이런식으로 테이블을 만들면 문제가 생긴다. 한 아이템의 확률을 조정하거나, 아이템을 삭제하거나, 새 아이템을 추가하게 된다면 모든 아이템의 확률 총합이 100%가 되지 않게 되면서, 그때마다 나머지 아이템들의 확률도 같이 조정해야 한다. 그래서 가중치라는 게 필요하다. 각 아이템의 가중치를 그 아이템의 부피라고 생각할 수 있다. 그림처럼 일렬로 붙인 다음에 Random pivot 포인터가 왼쪽 끝에서부터 오른쪽 끝까지 왔다 갔다 한다고 가정해보자. 어느 순간에 포인터를 스탑 시키고, 포인터가 어디 위에서 멈췄는지 확인하는 것..

    Call By Sharing

    let array = [0,0,0]; array = []; C#에서는 Array와 List에 Clear 함수가 있지만, 자바스크립트와 타입스크립트에는 존재하지 않는다. 그래서 자바스크립트에서는 배열을 빈 배열로 초기화할 때는 위와 같이 빈 배열 []로 덮어 씌우면 된다. 그동안 위와 같은 방법을 계속 사용하다가 흥미로운 점을 발견했다. onLoad() { let array = [0,0,0]; this.Clear(array); console.log(array); // [0,0,0] } Clear(array: Array) { array = []; } Array 타입은 number와 같은 기본 타입이 아닌 객체 타입이기 때문에 Clear 함수의 매개변수로 전달할 때 Call By Reference (참조 전달..

    함수 리스트 (Delegate)

    유니티에서 옵저버패턴과 delegate를 사용했었던 경험이 몇 번 있었는데, 타입스크립트와 코코스 크리에이터를 사용하는 프로젝트에서도 비슷하게 사용하고 싶은 상황이 생겼다. export class Manager { static delegate1: { [key: string]: any } = {}; // functions 컬렉션 static delegate2: Array = []; // functions 배열 } delegate는 이런 식으로 Dictionary 형태 또는 List 형태로 생성할 수 있다. 아무래도 타입스크립트는 함수와 변수를 다루는 데 있어서 차이가 없다시피 하고 any 타입으로 함수를 지칭할 수 있기 때문에 사용하기 더 간편하다. start() { Manager.delegate1['ju..

    Array 함수 #6. 기타

    Array 함수 #6. 기타

    1. toString let input = [1,2,3,4]; let output = input.toString(); // output = '1,2,3,4' 일반적으로 toString은 숫자 하나와 같은 객체 하나를 문자열로 변환할 때도 쓸 수 있지만 배열에 사용했을 때는 배열의 원소들을 연결해서 하나의 문자열로 반환한다. 만약 number 타입이 아닌 string 타입의 배열 ['1', '2', '3', '4']를 만들려면 let input = [1,2,3,4]; let output = input.map(String); // output = ['1','2','3','4'] map 함수를 써서 변환하려는 타입을 전달하면 된다. 2. join let input = [1,2,3,4]; let output =..

    Array 함수 #5. sort

    Array 함수 #5. sort

    1. sort let input = ['a','b','A','ddd','C','a7']; let output = input.sort(); // input = output = ['A','C','a','a7','b','ddd] sort 함수는 정렬한 후의 결과 배열을 리턴하며, 원본 배열도 같이 수정된다. 매개변수를 생략할 경우 ASCII 문자 표 기준 오름차순으로 정렬된다. let input = [8,3,5,0,11,6]; let output = input.sort(); // input = output = [0,11,3,5,6,8] 위의 배열을 정렬하면 예상과 다르게 11이 3 보다 앞서있다. 그 이유는 내부적으로 배열의 원소들을 string으로 형변환하고, 이후에 첫 번째 문자를 기준으로 정렬한다. 11..