-
Array FunctionTIL/ES6+ 2020. 12. 7. 21:47
๐ Array Function
๊ธฐ์กด ES5์์๋ ๋ฐฐ์ด์ ์ปจํธ๋กคํ ๋
for
๋ฌธ์ด๋each
๋ฌธ ๋ฑ ๋ฐ๋ณต๋ฌธ ์์์index
๊ฐ์ ๊ฐ์ง๊ณ ๋ฐฐ์ด ๋ด ์์๋ค์ ๋ํ ์์ ์ ํ๊ณค ํ๋ค. ES6+์์๋ ๋ฐฐ์ด์ ์ปจํธ๋กคํ๋ ๋ค์ํ ํจ์๋ค์ ์ ๊ณตํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ง ์๊ณ ๋ ๋ฐฐ์ด๋ก ์ํ๋ ๊ฐ์ ๋ฆฌํด ๋ฐ๋ ๋ฑ์ ์์ ์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.๐ญ find
find
๋ ์ด๋ฆ ๊ทธ๋๋ก ๋ฐฐ์ด์์ ์กฐ๊ฑด์ ๋ง๋ ์์ ์ค ์ฒซ๋ฒ์งธ ์์๋ฅผ ๋ฆฌํดํ๋ ๋ฉ์๋์ด๋ค.find() ๋ฉ์๋๋ ์ฃผ์ด์ง ํ๋ณ ํจ์๋ฅผ ๋ง์กฑํ๋ ์ฒซ ๋ฒ์งธ ์์์ ๊ฐ์ ๋ฐํํฉ๋๋ค. ๊ทธ๋ฐ ์์๊ฐ ์๋ค๋ฉด undefined๋ฅผ ๋ฐํํฉ๋๋ค. MDN document
ํ์ฌ ์์, ํ์ฌ ์์์ ์ธ๋ฑ์ค, ํ์ฌ ๋ฐฐ์ด์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ฐ๋๋ค.
const emails = ['aaa@abc.com', 'helloworld@gmail.com', 'astrogrammer@example.io', 'helloworld@example.io', 'hye.on@abc.com'];
์๋์์ ์ญ ์ฌ์ฉํ ์ด๋ฉ์ผ ๋ฐฐ์ด์ ๋ง๋ค์๋ค.
// find const findMail = emails.find((element, index, currentArray) => element.includes('@abc.com')); const findWithLength = emails.find((element, index, currentArray) => element.length > 20); console.log(findMail); // aaa@abc.com console.log(findWithLength); // astrogrammer@example.io
findMail
์ @abc.com์ ํฌํจํ๋ ์ฒซ๋ฒ์งธ ๊ฐ์ธ aaa@abc.com์ ๋ฆฌํดํ๊ณ , findWithLength๋ ๊ธธ์ด๊ฐ 20์ด ๋๋ ์ฒซ ๋ฒ์งธ ๊ฐ์ธ astrogrammer@example.io๋ฅผ ๋ฆฌํดํ๋ค.
์ด๋ ์ค์ํ ์ ์ ์กฐ๊ฑด์ ๋ถํฉํ๋ ๋ชจ๋ ์์๊ฐ ์๋ ์ต์ด์ ๊ฐ๋ง ๊ฐ์ ธ์จ๋ค๋ ์ ์ด๋ค.๐ค ๊ทธ๋ผ ์กฐ๊ฑด์ ๋ง๋ ๋ชจ๋ ๊ฐ์ ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
๐งน filter
filter
๋find
์ ๋น์ทํ๊ฒ ๋ฐฐ์ด์์ ์กฐ๊ฑด์ ๋ง๋ ์์๋ฅผ ์ฐพ์ง๋ง ์ฒซ ๋ฒ์งธ ์์๋ง ๋ฆฌํดํ์ง ์๊ณ ์กฐ๊ฑด์ ๋ง๋ ์์ ์ ์ฒด๋ฅผ ๋ฐฐ์ด๋ก ๋ฆฌํดํ๋ค.filter() ๋ฉ์๋๋ ์ฃผ์ด์ง ํจ์์ ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ๋ชจ๋ ์์๋ฅผ ๋ชจ์ ์๋ก์ด ๋ฐฐ์ด๋ก ๋ฐํํฉ๋๋ค. MDN document
๋ง์ฐฌ๊ฐ์ง๋ก ํ์ฌ ์์, ํ์ฌ ์์์ ์ธ๋ฑ์ค, ํ์ฌ ๋ฐฐ์ด์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ฐ๋๋ค.
const findAllMail = emails.filter( (element, index, currentArray) => element.includes('@abc.com') ); const findAllWithLength = emails.filter( (element, index, currentArray) => element.length > 20 ); console.log(findAllMail); // ['aaa@abc.com', 'hye.on@abc.com'] console.log(findAllWithLength); // ['astrogrammer@example.io', 'helloworld@example.io']
findAllMail
์๋ @abc.com์ ํฌํจํ๋ ์ด๋ฉ์ผ ์ฃผ์์ธ aaa@abc.com๊ณผ hye.on@abc.com์ ๋ฐฐ์ด๋ก ๋ฆฌํดํ๊ณ ,findAllWithLength
๋ ๊ธธ์ด๊ฐ 20์ด ๋๋ ๋ชจ๋ ์ด๋ฉ์ผ ์ฃผ์๋ค์ ๋ฐฐ์ด๋ก ๋ฆฌํดํ๋ค.๐บ map
map
์filter
์ ๋น์ทํ๋ฉด์๋ ๋ค๋ฅธ ๋ฉ์๋์ด๋ค. ๋์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ arrow function์ body ๋ถ๋ถ์ด๋ค.filter
๋ ์กฐ๊ฑด์ ๋ง๋ ์์๋ฅผ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์ ์์์ ์ฌ์ฉํString.includes()
๋element.length > 20
๊ณผ ๊ฐ์(callback)
์์ ์กฐ๊ฑด๋ฌธ์ด๋boolean
์ ๋ฆฌํดํ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณค ํ๋ค.
ํ์ง๋งmap
์ ํน์ ๊ท์น์ด๋ ๋ก์ง์ ์ ์ฉํ์ฌ ๋ณ๊ฒฝ๋ ๊ฐ์ ์๋ก์ด ๋ฐฐ์ด๋ก ๋ฆฌํดํด์ฃผ๊ธฐ ๋๋ฌธ์(callback)
์์element.lenght
๋element * 2
์ ๊ฐ์ด ์ด๋ค ์ฐ์ฐ์ด๋ ์์ ์ ์ํํ๋ ๋ฌธ์ฅ์ด ์ฌ ์ ์๋ค. ๋,map
์ ์๋ณธ ๋ฐฐ์ด๊ณผ 1:1์ด๋ฏ๋ก ์๋ณธ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 4์ด๋ฉด ์์ ์ด ์ํ๋ ํ ๋ฆฌํด๋๋ ๋ฐฐ์ด์ ๊ธธ์ด ๋ํ 4์ด๋ค.map() ๋ฉ์๋๋ ๋ฐฐ์ด ๋ด์ ๋ชจ๋ ์์ ๊ฐ๊ฐ์ ๋ํ์ฌ ์ฃผ์ด์ง ํจ์๋ฅผ ํธ์ถํ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์ ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค. MDN document
const usernames = emails.map( (element, index, currentArray) => element.split('@')[0] ); // @๋ฅผ ๊ธฐ์ค์ผ๋ก string์ ๋ถ๋ฆฌํด index 0์ธ ๊ฒ๋ง ๋ฆฌํด console.log(usernames); // ['aaa', 'helloworld', 'astrogrammer', 'helloworld', 'hye.on'] const usernamesWithIdx = emails.map( (element, index, currentArray) => ({name: element.split('@')[0], index}) ); // {}๋ฅผ () ๋ก ๊ฐ์ธ์ฃผ๋ฉด object array๋ ๋ฆฌํดํ ์ ์๋ค console.log(usernamesWithIdx); // [{name: 'aaa', index: 0}, {name: 'helloworld', index: 1}, {name: 'astrogrammer', index: 2}, {name: 'hye.on', index: 3}] const numbers = [1, 2, 3, 4, 5]; const twiceNumbers = numbers.map((element, index, currentArray) => element * 2); // 2๋ฅผ ๊ณฑํ๊ธฐ console.log(twiceNumbers); // [2, 4, 6, 8, 10]
map
์ ์์ ๊ฐ์ด ์๋ณธ ๋ฐฐ์ด์ ์ผ์ ํ ๋ก์ง์ด๋ ๊ท์น์ ์ ์ฉ์์ผ ์ผ๊ด์ ์ผ๋ก ๋ณ๊ฒฝํ ๋ฐฐ์ด์ ์์ฝ๊ฒ ๋ฆฌํด ๋ฐ์ ์ ์๋ค. ๋ง์ฝ,map
ํจ์๋ฅผ ์ฐ์ง ์๊ณusernames
๋ฅผ ์ป๊ณ ์ ํ๋ค๋ฉด ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.let usernames = []; emails.forEach((element, index, currentArray) => { usernames.push(element.split('@')[0]); });
๐โ๏ธ map์์ ๋ฆฌํดํ๋ ์์์ ์กฐ๊ฑด์ ์ค ์ ์๋์?
์๋์ ๊ฐ์ด ์์ฑํ๋ฉด ์ด๋ฉ์ผ ์ฃผ์์ ๊ธธ์ด๊ฐ 20๋ณด๋ค ๊ธด ๊ฒ์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ, ์๋ ๊ฒ์ ์ฃผ์์ ๊ธธ์ด๋ฅผ ๋ฆฌํดํ๊ฒ ๋๋ค.const mapWithIf = emails.map((item) => (item.length > 20 ? item : item.length));
๐โ๏ธ map์์ ์กฐ๊ฑด์ ํด๋นํ๋ ์์๋ค๋ง ๋ฆฌํดํ ์ ์๋์?
๋ ๊ฐ์ง Array Function์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ฒ๋ฆฌํ ์ ์๋ค. ์๋ ์ฝ๋๋ 20๋ณด๋ค ๊ธธ์ด๊ฐ ๊ธด ๋ฉ์ผ ์ฃผ์ ์์ My email is๋ผ๋ ๋ฌธ์ฅ์ ๋ถ์ฌ ๋ฆฌํดํ๋ค.const mapOnlyIf = emails.filter((item) => item.length > 20).map((item) => `My email is ${item}`);
์๊ธ
Array Functions'TIL > ES6+' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Default Value & Destructuring (0) 2021.01.02 Array Function2 (0) 2020.12.10 For Loop (0) 2020.12.05 Arrow Function (0) 2020.12.03 let & const (0) 2020.12.01