[TECH-QA] Lodash compact ํ•จ์ˆ˜

compact ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด์—์„œ falsy ๊ฐ’(null, undefined, false, 0, '', NaN ๋“ฑ)์„ ์ œ๊ฑฐํ•˜์—ฌ ์œ ํšจํ•œ ๊ฐ์ฒด๋งŒ ํฌํ•จํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐฐ์—ด์„ ์ •๋ฆฌํ•˜๊ฑฐ๋‚˜ ํ•„ํ„ฐ๋งํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
actionButtons={compact([
  { type: 'secondary', label: '์ทจ์†Œ', action: handleCancel },
  data?.needsExpiry && { type: 'primary_light', label: 'ํ™•์ธ', action: handleSaveExpiry },
])}
์—ฌ๊ธฐ์„œ compact๋Š” ๋ฐฐ์—ด ๋‚ด ๋‘ ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ์กฐ๊ฑด๋ฌธ(data?.needsExpiry && ...)์— ๋”ฐ๋ผ undefined ๋˜๋Š” false๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. data?.needsExpiry๊ฐ€ false์ด๊ฑฐ๋‚˜ undefined์ด๋ฉด ํ•ด๋‹น ์š”์†Œ๋Š” ์ œ์™ธ๋˜๊ณ , actionButtons์—๋Š” ์œ ํšจํ•œ ๋ฒ„ํŠผ ๊ฐ์ฒด๋งŒ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“ data.needsExpiry๊ฐ€ true์ธ ๊ฒฝ์šฐ

compact([
  { type: 'secondary', label: '์ทจ์†Œ', action: handleCancel },
  { type: 'primary_light', label: 'ํ™•์ธ', action: handleSaveExpiry }
])
๊ฒฐ๊ณผ: [{ type: 'secondary', label: '์ทจ์†Œ', action: handleCancel }, { type: 'primary_light', label: 'ํ™•์ธ', action: handleSaveExpiry }]

๐Ÿ“ data.needsExpiry๊ฐ€ false์ด๊ฑฐ๋‚˜ undefined์ธ ๊ฒฝ์šฐ

compact([
  { type: 'secondary', label: '์ทจ์†Œ', action: handleCancel },
  undefined // data?.needsExpiry && ...๋Š” falsy์ด๋ฏ€๋กœ undefined
])
โ†’ ๊ฒฐ๊ณผ: [{ type: 'secondary', label: '์ทจ์†Œ', action: handleCancel }]
  • compact๋Š” ๋ฐฐ์—ด์—์„œ falsy ๊ฐ’์„ ์ œ๊ฑฐํ•˜์—ฌ UI ์ปดํฌ๋„ŒํŠธ(์—ฌ๊ธฐ์„œ๋Š” ๋ฒ„ํŠผ ๋ชฉ๋ก)๋ฅผ ๋™์ ์œผ๋กœ ๋ Œ๋”๋งํ•  ๋•Œ ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ๋งŒ ํฌํ•จํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ์กฐ๊ฑด๋ถ€ ๋ฒ„ํŠผ ๋ Œ๋”๋ง ์‹œ ์œ ์šฉํ•˜๋ฉฐ, ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ๊ณผ ๊ฐ„๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ํ•จ์ˆ˜๋Š” Lodash์˜ _.compact์™€ ์œ ์‚ฌํ•œ ์—ญํ• ์„ ํ•˜๋ฉฐ, React ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋™์  UI ๋ Œ๋”๋ง์— ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.