배열의 이해(2)

omnigi·2022년 2월 19일

인덱스 연산자

배열이 담고 있는 아이템중 특정위치에 있는 아이템을 얻고 싶을때는 인덱스 연산자를 사용합니다.

const numbers :number[] =[1, 2, 3, 4, 5]
for(let index = 0; index < numbers.length; index++){
    const item:number = numbers[index]
    console.log(item)
}

배열의 비구조화 할당

배열의 비구조화 할당문에서는 객체와 달리 [] 기호를 사용합니다.

const array:number[] =[1, 2, 3, 4, 5]

let [first, second, third, ...rest]= array
console.log(first, second, third, ...rest)

for ...in 문

for ...in문은 객체를 대상으로 사용합니다.
for in문은 배열의 인덱스값을 순회합니다.

for(변수 in 객체){
	...
}

ex

let names = ["Jack", "doyoon", "junsung"]

for (const index in names){
    const name = names[index]
    console.log(`${index}: ${name}`)
}

for ...of 문

for ...in문은 배열의 인덱스값을 대상으로 순회하지만, for ...of문은 배열의 아이템값을 대상으로 순회합니다. 다음코드는 for ...of구문의 예로, 아이템값만 필요할 때는 for ...in보다 좀 더 간결하게 구현할 수 있습니다.

for(let 변수 of 객체){
	...
}

ex

for (const name of ["Jack", "doyoon", "junsung"]){
    console.log(name)
}

제네릭 방식 타입

배열을 다루는 함수를 작성할때는 number[]과 같이 타입이 고정된 함수를 만들기 보다는 T[]형태로 배열의 아이템 타입을 한꺼번에 표현하는 것이 편리합니다. 타입을 T와 같은 일종의 변수로 취급하는 것을 제네릭 타입이라고 합니다.

const arrayLength = (array: T[]):number => array.length

이렇게 하면 컴파일러가 T의 의미를 알 수 있어야 합니다.
(T가 타입변수라고 알려줘야 한다는 뜻)

arrayLength.ts

export const arrayLength = <T>(array:T[]): number => array.length
export const isEmpt = <T>(array:T[]):boolean => arrayLength<T>(array) == 0

arrayLength-test.ts

import { arrayLength, isEmpt } from "./05/arrayLength";
let numArray:number[] = [1, 2, 3]
let strArray: string[] = ["Hello", "World"]

type IPerson = {name: string, age?: number}
let personArray: IPerson[] = [{name:"doyoon"},{name:"Junsung", age:23}, {name:"seokwon", age:23}]

console.log(
    arrayLength(numArray),
    arrayLength(strArray),
    arrayLength(personArray),
    isEmpt([]),
    isEmpt([1])
)

제네릭 함수의 타입추론

제네릭 형태로 구현된 함수는 원칙적으로 타입변수를 다음과 같은 형태로 명시 해주어야 합니다.

함수이름<타입변수>(매개변수)

ex

const identity = <T>(n: T): T => n
console.log(
    identity<boolean>(true),
    identity(true)
)

전개연산자

...을 전개연산자라고 하였고 배열에도 적용할 수 있습니다.

let array1: number[] = [1]
let array2: number[] = [1, 2]
let mergedArrat:number[] = [...array1, ...array2, 5]

console.log(mergedArrat)

0개의 댓글