[알고리즘] 자바스크립트 9가지 코드 트릭

2022. 4. 19. 16:22·알고리즘/풀이 힌트
반응형

1. 구조 분해 할당을 이용한 변수 swap

ES6의 구조 분해 할당 문법을 사용하여 두 변수를 swap 할 수 있다. 

let a = 5;
let b= 10;

[a,b] = [b,a];
console.log(a, b);  // 10 5

 

2. 배열 생성으로 루프 제거

let sum = 0; 
for (let i = 5; i < 10; i++){
	sum += i;
}

단순 범위 루프를 돌고 싶은 경우 위와 같이 작성한다. 

 

const sum = Array
    .from(new Array(5), (_, k) => k + 5)
    .reduce((acc, cur) => acc + cur, 0);

만약 범위 루프를 함수형 프로그래밍 방식으로 사용하고 싶다면 배열을 생성해서 사용할 수 있다. 

 

Array
    .from(new Array(5), (_, k) => k + 5)

from을 통해서 배열을 만드는데, 첫 번째 매개변수는 변환하고자 하는 배열 객체나 반복 가능한 객체이다. 

두 번째 (_, k)를 통해 첫 번째 배열을 반복하는데, _는 배열의 값, k는 인덱스이다. 

ex) 
console.log(Array.from('foo'));
// expected output: Array ["f", "o", "o"]

console.log(Array.from([1, 2, 3], x => x + x));
// expected output: Array [2, 4, 6]

 

const sum = Array
    .from(new Array(5), (_, k) => k + 5)
    .reduce((acc, cur) => acc + cur, 0);

reduce를 사용해 각 매개변수를 모두 더하여서 return 하고 있다, 두 번째 매개변수 0은 초기값이다. 

 

3. 배열 내 같은 요소 제거하기 

const names = ['Lee', 'Kim', 'Park', 'Lee', 'Kim'];
const uniqueNamesWithArrayFrom = Array.from(new Set(names));
// ['Lee', 'Kim', 'Park']
const uniqueNamesWithSpread = [...new Set(names)];
// ['Lee', 'Kim', 'Park']

Set을 이용하면 배열 안에 있는 같은 요소를 제거할 수 있다. 

 

4. Spread 연산자를 이용한 객체 병합

const person = {
    name: 'Lee Sun-Hyoup',
    familyName: 'Lee',
    givenName: 'Sun-Hyoup'
};

const company = {
    name: 'Cobalt. Inc.',
    address: 'Seoul'
};

const leeSunHyoup = { ...person, ...company };
console.log(leeSunHyoup);
// {
//   address: “Seoul”
//     familyName: “Lee”
//   givenName: “Sun-Hyoup”
//   name: "Cobalt. Inc." // 같은 키는 마지막에 대입된 값으로 정해진다.
// }

두 객체를 변도의 변수로 합쳐줄 수 있다. 

이때 같은 키값을 가진 경우 마지막 대입된 값으로 정해진다. 

 

5. &&  와  || 활용 

/// ||
// 기본값을 넣어주고 싶을 때 사용할 수 있습니다.
// participantName이 0, undefined, 빈 문자열, null일 경우 'Guest'로 할당됩니다.
const name = participantName || 'Guest';

/// &&
// flag가 true일 경우에만 실행됩니다.
flag && func();

// 객체 병합에도 이용할 수 있습니다.
const makeCompany = (showAddress) => {
  return {
    name: 'Cobalt. Inc.',
    ...showAddress && { address: 'Seoul' }
  }
};
console.log(makeCompany(false));
// { name: 'Cobalt. Inc.' }
console.log(makeCompany(true));
// { name: 'Cobalt. Inc.', address: 'Seoul' }

&&와 ||는 조건문 외에도 활용될 수 있다. 

 

6. 구조 분해 할당 사용하기 

const person = {
    name: 'Lee Sun-Hyoup',
    familyName: 'Lee',
    givenName: 'Sun-Hyoup'
    company: 'Cobalt. Inc.',
    address: 'Seoul',
}

const { familyName, givenName } = person;

객체에서 필요한 것만 꺼내 쓰는 것이 좋다. 

 

7. 비구조화 할당 사용

const makeCompany = ({ name, address, serviceName }) => {
  return {
    name,
    address,
    serviceName
  }
};
const cobalt = makeCompany({ name: 'Cobalt. Inc.', address: 'Seoul', serviceName: 'Present' });

함수에서 객체를 넘길 경우 필요한 것만 꺼낼 수 있다. 

 

8. 동적 속성 이름 

const nameKey = 'name';
const emailKey = 'email';
const person = {
  [nameKey]: 'Lee Sun-Hyoup',
  [emailKey]: 'kciter@naver.com'
};
console.log(person);
// {
//   name: 'Lee Sun-Hyoup',
//   email: 'kciter@naver.com'
// }

ES6에 추가된 기능으로 객체의 키를 동적으로 생성할 수 있다. 

 

9. !! 연산자를 사용해 Boolean 값으로 변경

function check(variable) {
  if (!!variable) {
    console.log(variable);
  } else {
    console.log('잘못된 값');
  }
}
check(null); // 잘못된 값
check(3.14); // 3.14
check(undefined); // 잘못된 값
check(0); // 잘못된 값
check('Good'); // Good
check(''); // 잘못된 값
check(NaN); // 잘못된 값
check(5); // 5

!! 연산자를 사용하면 0, null, 빈 문자열, unfined, NaN을 false 외에 true로 변경할 수 있다. 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 > 풀이 힌트' 카테고리의 다른 글

[알고리즘] 배열을 반복해 순차적으로 값을 변경 및 수정하기  (1) 2022.07.28
[알고리즘] 배열( 순차 리스트)  (4) 2022.04.20
[알고리즘] 시간 복잡도  (0) 2022.04.11
[알고리즘] 자료구조? 알고리즘?  (0) 2022.04.10
[알고리즘] 휴리스틱 알고리즘  (1) 2022.03.20
'알고리즘/풀이 힌트' 카테고리의 다른 글
  • [알고리즘] 배열을 반복해 순차적으로 값을 변경 및 수정하기
  • [알고리즘] 배열( 순차 리스트)
  • [알고리즘] 시간 복잡도
  • [알고리즘] 자료구조? 알고리즘?
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    프로그래머스
    ReactNative
    react
    redux
    덤프
    바질
    네트워크
    webpack
    typescript
    영어회화
    타입스크립트
    next.js
    알고리즘
    Docker
    Node.js
    자바스크립트
    리얼학습일기
    영어독학
    바질 키우기
    타일러영어
    식물
    ChatGPT
    CCNA
    javascript
    리액트
    네이버 부스트캠프
    다이소
    CSS
    리얼클래스
    Babel
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[알고리즘] 자바스크립트 9가지 코드 트릭
상단으로

티스토리툴바