포시코딩

[JS] Object key 값에 변수 사용하기 본문

카테고리 없음

[JS] Object key 값에 변수 사용하기

포시 2023. 11. 2. 11:22
728x90
async remove(account_idx: number, target: string, target_idx: number) {
  if (target === 'product') {
    const data = await this.favoriteRepository.findOne({ where: { account_idx, product_idx: target_idx } });
    if (_.isNil(data)) {
      throw new NotFoundException();
    }
    return await this.favoriteRepository.remove(data);

  } else if (target === 'seller') {
    const data = await this.favoriteRepository.findOne({ where: { account_idx, seller_idx: target_idx } });
    if (_.isNil(data)) {
      throw new NotFoundException();
    }
    return await this.favoriteRepository.remove(data);
  }
}

 

위 코드에서 target 값이 달라질 때, favorite에 넣는 컬럼 값이 달라지기 때문에 

if문을 통해 분기를 구분했는데, 

findOne에서 사용되는 Object 값의 key 값 말고는 모두 같은 코드인 것을 볼 수 있다.

 

`${target}_key`

key 값에 변수를 사용해 문자열에서 위와 같이 표현할 수 있다면 중복 코드를 없앨 수 있을텐데 하는 생각을 했고

역시나 방법은 있었다. 

 

https://koonsland.tistory.com/146

 

[Javascript] Object 생성시 key를 변수에 담긴 문자로 사용하는 방법

Javascript를 이용해서 데이터를 주고 받을때에는 보통 Object를 사용합니다. 통신을 위해서는 JSON Object를 많이 사용하죠. 이때 변수에 담긴 문자 또는 문자열을 Object의 key로 사용하려 할때가 있습니

koonsland.tistory.com

 

해당 방법을 위 블로그에서 찾을 수 있었고, 위 내용에 따르면

es6부터 []을 활용해 변수를 key값으로 지정할 수 있다. 

 

async remove(account_idx: number, target: string, target_idx: number) {
  const target_key = `${target}_idx`;

  const data = await this.favoriteRepository.findOne({ where: { account_idx, [target_key]: target_idx } });
  if (_.isNil(data)) {
    throw new NotFoundException();
  }
  return await this.favoriteRepository.remove(data);
}

 

그에 따라 변경한 결과는 위와 같다. 

 

{ where: { account_idx, [`${target}_idx`]: target_idx } }

 

이처럼 대괄호[] 안에서 바로 작성하는 것도 가능하다.

728x90