filter()๋Š” ๋ฐฐ์—ด์—์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๋งŒ ๋‚จ๊ธฐ๊ณ  ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
์ฆ‰, โ€œํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ฑธ๋Ÿฌ๋‚ผ ๋•Œโ€ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


1๏ธโƒฃ ์ˆซ์ž ์กฐ๊ฑด์œผ๋กœ ๊ฑธ๋Ÿฌ๋‚ผ ๋•Œ

ํŠน์ • ์กฐ๊ฑด(์˜ˆ: ์ง์ˆ˜, ํ™€์ˆ˜, ์–‘์ˆ˜ ๋“ฑ)์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ’๋งŒ ๋‚จ๊ธฐ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

const numbers = [1, 2, 3, 4, 5, 6];

// ์ง์ˆ˜๋งŒ ๋‚จ๊ธฐ๊ธฐ
const even = numbers.filter(num => num % 2 === 0);

console.log(even); // [2, 4, 6]

๐Ÿ’ก filter()๋Š” ์กฐ๊ฑด์ด true์ธ ์š”์†Œ๋งŒ ๋‚จ๊ธฐ๋ฉฐ, ์ƒˆ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.


2๏ธโƒฃ ๋ฌธ์ž์—ด ํ•„ํ„ฐ๋ง (๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๋“ฑ)

์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’์— ๋”ฐ๋ผ ํŠน์ • ๋ฌธ์ž์—ด์ด ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฑธ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const fruits = ["์‚ฌ๊ณผ", "๋ฐ”๋‚˜๋‚˜", "ํฌ๋„", "๋”ธ๊ธฐ"];

const search = "๋ฐ”";
const result = fruits.filter(fruit => fruit.includes(search));

console.log(result); // ["๋ฐ”๋‚˜๋‚˜"]

๐Ÿ’ก ๊ฐ„๋‹จํ•œ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ ๋งค์šฐ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


3๏ธโƒฃ ๊ฐ์ฒด ๋ฐฐ์—ด์—์„œ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๋‚จ๊ธฐ๊ธฐ

๊ฐ์ฒด ๋ฐฐ์—ด์—์„œ ํŠน์ • ์†์„ฑ๊ฐ’ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const users = [
  { name: "Tom", age: 25 },
  { name: "Jane", age: 30 },
  { name: "Kim", age: 28 }
];

// 27์„ธ ์ด์ƒ๋งŒ ๋‚จ๊ธฐ๊ธฐ
const adults = users.filter(user => user.age >= 27);

console.log(adults);
// [{ name: "Jane", age: 30 }, { name: "Kim", age: 28 }]

๐Ÿ’ก ํŠน์ • ์กฐ๊ฑด(๋‚˜์ด, ์ ์ˆ˜, ์ƒํƒœ ๋“ฑ)์— ๋งž๋Š” ๊ฐ์ฒด๋งŒ ์ถ”์ถœํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


4๏ธโƒฃ ๋ฐฐ์—ด ์ค‘๋ณต ์ œ๊ฑฐ (์กฐํ•ฉ ํ™œ์šฉ)

filter()์™€ indexOf()๋ฅผ ์กฐํ•ฉํ•˜๋ฉด ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const numbers = [1, 2, 2, 3, 4, 4, 5];

const unique = numbers.filter((num, index, arr) => arr.indexOf(num) === index);

console.log(unique); // [1, 2, 3, 4, 5]

๐Ÿ’ก ๊ฐ„๋‹จํ•œ ์ค‘๋ณต ์ œ๊ฑฐ๋„ filter() ํ•˜๋‚˜๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


5๏ธโƒฃ null, undefined, false ์ œ๊ฑฐํ•˜๊ธฐ (๋ฐ์ดํ„ฐ ์ •์ œ)

๋ฐ์ดํ„ฐ ๋ฐฐ์—ด์—์„œ ๋นˆ ๊ฐ’์ด๋‚˜ falsy ๊ฐ’์„ ํ•œ ๋ฒˆ์— ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const data = [0, 1, null, 2, undefined, 3, false, 4, "", 5];

const cleaned = data.filter(Boolean);

console.log(cleaned); // [1, 2, 3, 4, 5]

๐Ÿ’ก filter(Boolean) ํŒจํ„ด์€ ๋ฐ์ดํ„ฐ ์ •์ œ(clean-up) ์‹œ ๋งค์šฐ ์ž์ฃผ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿง  ์ •๋ฆฌ โ€” filter()๋ฅผ ์จ์•ผ ํ•  ๋•Œ

์ƒํ™ฉ ์„ค๋ช… ์˜ˆ์‹œ
์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœ ์ˆซ์ž, ๋ฌธ์ž์—ด, ๊ฐ์ฒด ๋“ฑ์—์„œ ํŠน์ • ์กฐ๊ฑด๋งŒ ๋‚จ๊น€ ์ง์ˆ˜, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋“ฑ
๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฌธ์ž์—ด ํฌํ•จ ์—ฌ๋ถ€ ๊ฒ€์‚ฌ .includes() ์กฐํ•ฉ
๊ฐ์ฒด ๋ฐฐ์—ด ์กฐ๊ฑด ํ•„ํ„ฐ๋ง ์†์„ฑ๊ฐ’ ๊ธฐ์ค€ ๋‚˜์ด 30์„ธ ์ด์ƒ ๋“ฑ
์ค‘๋ณต ์ œ๊ฑฐ indexOf() ์กฐํ•ฉ [1,2,2,3] โ†’ [1,2,3]
๋ฐ์ดํ„ฐ ์ •์ œ filter(Boolean) falsy ๊ฐ’ ์ œ๊ฑฐ

๐Ÿ”š ๋งˆ๋ฌด๋ฆฌ

filter()๋Š” ๋ฐฐ์—ด์—์„œ ์›ํ•˜๋Š” ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ฑธ๋Ÿฌ๋‚ผ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ฒ€์ƒ‰, ํ•„ํ„ฐ ๊ธฐ๋Šฅ, ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง, ๋ฐ์ดํ„ฐ ์ •์ œ ๋“ฑ ํ˜„์‹ค์ ์ธ ๊ฐœ๋ฐœ ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ์“ฐ์ด๋Š” ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค ๐Ÿ’ก