SW/JavaScript

String & Array & Objects

맛대 2022. 4. 30. 15:03

문자열(String) & 배열(Arrays) & 객체(Objects)

문자열 관련 메서드

  • includes
    • 특정 문자열의 존재 여부를 **참/거짓**으로 반환
    • const str = 'github ljm0850'
      
      str.includes('github')		// true
      str.includes('https')		// false
  • split
    • 문자열을 토큰 기준으로 나눈 **배열** 반환
    • 인자가 없으면 기존 문자열을 배열에 담아 반환
    • const str = 'github ljm'
      
      str.split()		// ['github ljm']
      str.split('')	// ['g','i','t','h','u','b',' ','l','j','m']
      str.split(' ')	// ['github', 'ljm']
  • replace
    • 해당 문자열을 대상 문자열로 **교체**하여 반환
    • const str = 'github ljm javascript'
      
      str.replace(' ', '-')		// 'github-ljm javascript'
      str.replaceAll(' ','-')		// 'github-ljm-javascript'
  • trim
    • 문자열의 좌우 공백을 제거하여 반환
    • const str = '   ljm   '
      str.trim()			// 'ljm'
      str.trimStart()		// 'ljm   '
      str.trimEnd()		// '   ljm'

배열(Arrays)

  • 키와 속성들을 담고 있는 **참조 타입의 객체(object)**
    • key = index 인 객체
    • a = [1,2,3]
      b = [1,2,3]
      a === b		// false
      a == b		// false
  • 순서를 보장
  • 대괄호`[]`를 이용하여 생성, 0을 포함한 **양의 정수** 인덱스로 특정 값에 접근 가능
    • 배열의 길이는 array.length 형태로 접근
    • const numbers = [1,2,3,4,5]
      console.log(numbers[0])		// 1
      console.log(numbers[numbers.length-1])	//5
      console.log(numbers[-1])	// undefined

Spread operator

const arr1 = [1,2,3]
const arr2 = [0, ...arr1, 4]
console.log(arr2)	// [0, 1, 2, 3, 4]

주요 메서드-기본 배열 조작

reverse

  • 원본 배열의 요소들의 순서를 반대로 정렬
  • const numbers = [1,2,3]
    numbers.reverse()
    console.log(numbers)	//[3,2,1]

push & pop

  • 배열 가장 뒤에 요소를 추가&제거
  • const numbers = [1,2,3]
    
    numbers.push(4)
    console.log(numbers)	// [1,2,3,4]
    
    numbers.pop()
    console.log(numbers)	// [1,2,3]

unshift & shift

  • 배열 가장 앞에 요소를 추가&제거
  • const numbers = [1,2,3]
    
    numbers.unshift(0)
    console.log(numbers)	// [0,1,2,3]
    
    numbers.shift()
    console.log(numbers)	// [1,2,3]

includes

  • 배열에 특정 값이 존재하는지 판별 true/false
  • const numbers = [1,2,3]
    console.log(numbers.includes(1))		// true
    console.log(numbers.includes(4))		// false

indexOf

  • 배열에 특정 값이 존재하는지 판별 후 인덱스 반환
  • 요소가 없을 경우 -1 반환
  • const numbers = [1,2,3]
    let test
    
    test = numbers.indexOf(3)
    console.log(test)			//2
    
    test = numbers.indexOf(4)
    console.log(test)			// -1

join

  • 배열의 모든 요소를 구분자를 이용하여 연결, dafault = 쉼표
  • const numbers = [1,2,3]
    let test
    
    test = numbers.join()
    console.log(test)			// 1,2,3
    
    test = numbers.join('')
    console.log(test)			// 123

주요 메서드-Array Helper Methods

  • 배열을 순회하며 특정 로직을 수행
  • 매서드 호출 시 인자로 callback 함수를 받음
    • callback 함수: 함수의 내부에서 실행될 목적으로 인자를 넘겨받는 함수

forEach

  • array.forEach((element,index, array) => {
        ~~
    })
  • const foods = ['참치','닭','돼지','소','양']
    
    foods.forEach((food, index) => {
        console.log(food, index)
    })
    // 참치 0  닭 1 ~~
  • 배열의 각 요소에 대해 callback 함수를 한 번씩 실행
  • **반환 값 없음**
  • 매개변수
    • element : 배열의 요소
    • index : 배열 요소의 인덱스
    • array : 배열 그자체

배열 순회 비교

  • for loop
    • 모든 브라우저 지원
    • 인덱스를 활용하여 배열의 요소에 접근
    • break, continue 사용 가능
  • for of
    • 일부 오래된 브라우저 지원x
    • 인덱스 없이 배열의 요소에 접근
    • break, continue 사용 가능
  • forEach
    • 대부분의 브라우저 지원
    • break, continue 사용 불가
    • Airbnb Style Guide 권장 방식

map

  • array.map((element, index, array) =>{
     	~~   
    })
  • const numbers = [1,2,3]
    
    const newNumbers = numbers.map((num) => {
        return num +2
    })
    console.log(newNumbers)		// [3,4,5]
  • 배열의 각 요소에 대해 콜백 함수를 한 번씩 실행
  • callback 함수의 **반환 값**을 요소로 하는 새로운 배열 반환

filter

  • array.filter((element, index, array) => {
        ~~
    })
  • const numbers = [1,2,3]
    const newNumbers = numbers.filter((num,index)=>{
        return num %2
    })
    console.log(newNumbers)		//[1,3]
  • callback 함수의 **반환 값이 참인 요소**들만 모아 새로운 배열 반환

reduce

  • array.reduce((acc, element, index, array) =>{
        ~~
    }, initialValue)
  • const numbers = [1,2,3]
    const result = numbers.reduce((acc, num) => {
        return acc + num
    },5)
    console.log(result)		// 11
    // initialValue 미작성시 6
  • 배열의 각 요소에 대해 콜백 함수를 한 번씩 실행
  • callback 함수의 반환 값들을 하나의 값(acc)에 누적 후 반환
  • 매개변수
    • acc : 이전 callback 함수의 반환 값이 누적되는 변수
    • initialValue : 최초 함수 호출시 acc에 할당되는 값, default는 배열의 첫 번째 값
      • 빈 배열의 경우 initialValue값이 없을 경우 에러 발생

find

  • array.find((element, index, array) => {
        ~~
    })
  • const info = [
        { name: 'ljm', language: 'Python'},
        { name: 'ljm0850', language: 'JavaScript'},
    ]
    
    const result = info.find((info) => {
        return info.name === 'ljm0850'
    })
    console.log(result)
    // {name: 'ljm0850', language: 'JavaScript'}
  • 배열의 각 요소에 대해 콜백 함수를 한 번씩 실행
  • callback 함수의 반환 값이 참이면 해당 요소를 반환후 종료
    • 첫번째 요소만 반환이 됨
  • 찾는 값이 배열에 없으면 undefined 반환

some

  • array.some((element, index, array) => {
        ~~
    })
  • const numbers = [1,3,5]
    const evenNum = numbers.some((num)=>{
        return num%2 === 0
    })
    console.log(evenNum)		// false
  • 배열의 요소 중 **한개라도** 함수(조건)을 통과하면 true을 반환
  • 빈 배열의 경우 **항상 false** 반환

every

  • array.every((element,index,array) => {
        ~~
    })
  • const numbers = [1,3,5]
    const oddNum = numbers.every((num)=>{
        return num % 2
    })
    console.log(oddNum)		//true
  • 배열의 **모든 요소**가 함수(조건)을 통과하면 true을 반환
  • 빈 배열의 경우 **항상 true** 반환

객체(Objects)

const info = {
    language : 'JavaScript',
    'today date' : {
        year : '2022',
        month : 4,
    },
}
console.log(info.language)		// JavaScript
console.log(info['today date'])	// {year: '2022', month: 4}
  • 속성(property)의 집합, key-value 쌍으로 표현
  • key는 문자열 타입만 가능
    • key 이름에 띄어쓰기 등의 구분자가 있을 경우 따옴표`''`'로 묶어서 표현
  • value는 모든 타입 가능
  • 객체 요소 접근은 .(dot) 혹은 대괄호[]로 가능
    • key이름에 구분자가 있을 경우 대괄호만 가능

객체와 메서드

const me = {
    firstName: 'jm',
    lastName: 'l',
    fullName: this.firstName + this.lastname,		// this가 window를 의미함
    getFullName: function(){
        return this.firstName + this.lastName		// this가 me를 의미
    }
}
console.log(me.fullName)			// NaN
console.log(me.getFullName())		// jml
const obj = {
    PI = 3.14,
    radiuses = [1,2,3],
    printArea: function(){
        this.radiuses.forEach(function(r){
            console.log(this.PI * r * r)		// 여기서의 this는 메스드에서 호출한 것이 아니라 window를 의미, bind를 이용하여 this = obj를 의미하게 설계 or arrowFunction 이용
        }.bind(this)
    }
}
  • 메서드는 객체의 속성이 참조하는 함수
  • 객체.메서드명()으로 호출 가능
  • 매서드 내부에서는 this가 객체를 의미

this

  • 실행 문맥에 따라 다른 대상을 지칭
  • 기본적으로는 최상위 객체(window)
  • class 내부의 생성자(constructor)함수
    • 생성되는 객체를 가리킴(python-self)
  • 매서드(객채.메서드()로 호출하는 함수)
    • 해당 매서드가 소속된 객체를 가리킴

객체 관련 ES6 문법

속성명 축약 : value 생략

const books = ['JUSTICE','THE TYRANNY OF MERIT']
const magazines = ['TIME', 'Nature']
const bookshop = {
    books,//books:books,
    magazines//magazines:magazines,
}
  • key와 value에 들어갈 변수 이름이 같으면 축약

메서드명 축약 : function 생략

const obj ={
    greeting(){//greeting: function(){
        
    }
}

계산된 속성(computed property name)

const key = 'books'
const value = ['팩트풀니스','보통의존재','우리가 보낸 가장 긴 밤']

const bookstore = {
    [key]: value,
}
console.log(bookstore)		// {books:Array(3)}
console.log(bookstore.books)	// ['팩트풀니스','보통의존재','우리가 보낸 가장 긴 밤']
  • 객체 정의시 key의 이름을 표현식을 이용하여 동적으로 생성 가능

구조 분해 할당(destructing assignment)

const info ={
    name: 'ljm',
    github: 'github.com/ljm0850',
    blog: 'ljm0850.tistory.com/',
    
}
const { name } = info					// const name = info.name
const { blog, github } = info

console.log(blog)		// ljm0850.tistory.com/
  • 배열, 객체를 분해하여 속성을 변수에 쉽게 할당 하는 방법

Spread operator(...)

const obj = {b:2, c:3}
const newObj = {a:1, ...obj, e:5 }
console.log(newObj)		// {a: 1, b: 2, c: 3, e: 5}
  • `...`을 사용하여 객체 내부에서 객체 전개 가능
  • 얕은 복사에 활용 가능

JSON (JavaScript Object Notation)

const jsonData = JSON.stringify({
    name: 'ljm',
    language: 'JavaScript',
})
const parsedData = JSON.parse(jsonData)
console.log(parsedData)			//{name: 'ljm', language: 'JavaScript'} , string 타입
console.log(jsonData)			//{"name":"ljm","language":"JavaScript"}, object 타입
  • key-value쌍의 형태로 데이터를 표기하는 언어 독립적 표준 포맷
  • JS의 객체와 유사하지만, 문자열 타입
    • 객체로 사용하기 위해서는 parsing이 필수
  • JSON.parse()
    • JSON => 객체
  • JSON.stringify()
    • 객체 => JSON

lodash

  • 모듈성, 성능 및 추가기능을 제공하는 JavaScript 유틸리티 라이브러리
  • array, object 등 자료구조를 다룰 때 유용하고 간편한 함수 제공
    • reverse, sortBy, range, random, cloneDeep ...

'SW > JavaScript' 카테고리의 다른 글

DOM 조작 & Event  (0) 2022.04.30
함수  (0) 2022.04.30
연산자 & 조건문 & 반복문  (0) 2022.04.30
Data type & 변수 선언 & 식별자  (0) 2022.04.30
intro  (0) 2022.04.30