๐ filter + join ๋ฉ์๋๋ก ๊ฐ๋ ์ฑ ์๋ ์ฝ๋ ์์ฑํ๊ธฐ
string | null ํ์
์ ๊ฐ์ง๋ a, b๋ฅผ ์ฌ์ฉํ์ฌ a·b๋ก ๋ํ๋ด์ผํ๋ค. ๋ง์ฝ, ๋ ์ค์ ํ๋๋ผ๋ null์ผ ๊ฒฝ์ฐ ·๋ฅผ ํ์ํ์ง ์๊ณ , string ํ์
๋ง ๋ํ๋ด์ผํ๋ค. ์๋ฅผ ๋ค์ด a = 'foo'์ด๊ณ , b = 'bar'์ผ ๋ ๋ ๋ค ๊ฐ์ด ์กด์ฌํ๋ฉด foo·bar๋ก, aํ์
๋ง ์กด์ฌํ๋ฉด foo, bํ์
๋ง ์กด์ฌํ๋ฉด bar, a์ b ๋ ๋ค ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ null ํน์ ''์ ๋ํ๋ด์ผํ๋ค. ์ด๋ด ๋ ์ด๋ป๊ฒ ๊ฐ๋
์ฑ ์๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ๊ฒ์ธ๊ฐ?
๋ฆฌ์กํธ์์ ์ฌ์ฉํ ๋ AS-IS๋ ์กฐ๊ฑด์๊ณผ join ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ a && b ? [a, b].join('·') : a || b๋ก ๋ํ๋๋๋ฐ, ๊ฐ๋
์ฑ์ด ๋๋ฌด ๋จ์ด์ก๋ค. ๊ทธ๋์ TO-BE ์ฒ๋ผ filter + join ๋ฉ์๋๋ฅผ ๊ฐ์ด ์ฌ์ฉํ๋ ๊ฐ๋
์ฑ์ด ์ด์ ๋ณด๋ค ์ฆ๊ฐํ์๋ค.
const category: string | null = '๊ฐ๋ฐ';
const language: string | null = 'Typescript';
// AS-IS
const result1 =
category && language ? [category, language].join('·') : category || language
// TO-BE
const result2 = [category, language].filter(Boolean).join('·')
// category, language ๋ชจ๋ ๊ฐ์ด ์๋๊ฒฝ์ฐ
๐๐พ result1: ๊ฐ๋ฐ·Typescript
๐๐พ result2: ๊ฐ๋ฐ·Typescript
// category๋ ์กด์ฌํ๊ณ language๋ null์ธ ๊ฒฝ์ฐ
๐๐พ result1: Typescript
๐๐พ result2: Typescript
// category๋ null์ด๊ณ language๋ ์กด์ฌํ๋ ๊ฒฝ์ฐ
๐๐พ result1: ๊ฐ๋ฐ
๐๐พ result2: ๊ฐ๋ฐ
// ๋ ๋ค null์ธ ๊ฒฝ์ฐ
๐๐พ result1: null
๐๐พ result2: ''
๋๊ธ