๐ง ๋ฐ์ดํฐ ๋ณํ์ด๋?
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์๋ ํจ์๋ฅผ ์ฌ์ฉํด ์๋ณธ์ ๋ณ๊ฒฝํ ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ด์ค๋ค.
-> ์ด๋ฐ ์์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ์ฝ๋๊ฐ ๋ ๋ช ๋ นํ์ด ๋๊ณ , ๊ทธ์ ๋ฐ๋ผ ๋ณต์ก๋๋ ๊ฐ์ํ๋ค
์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณํํด์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด ๋ผ ์ ์๊ฒ ํด์ฃผ๋ ๋๊ตฌ๋ค์ด ์๋ค.
1) Array.filter
- ์๋ณธ ๋ฐฐ์ด๋ก๋ถํฐ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด๋ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด ๋ด์ฅ ํจ์์ด๋ค.
- ์ ์ด(predicate)๋ฅผ ์ ์ผํ ์ธ์๋ก ๋ฐ๋๋ค. (์ ์ด : true๋ false๋ฅผ ๋ฐํํ๋ ํจ์)
- ๋ฐฐ์ด์ ์๋ ๋ชจ๋ ์์์ ์ด ์ ์ด๋ฅผ ํ ๋ฒ์ฉ ํธ์ถํ๋ค.
- ์ ์ด์ ๋ฐฐ์ด์ ์์๋ฅผ ์ธ์๋ก ์ ๋ฌํ๋ฉฐ, ๋ฐํ ๊ฐ์ด true์ด๋ฉด ํด๋น ์์๋ฅผ ์๋ก์ด ๋ฐฐ์ด์ ๋ฃ๋๋ค.
const cities = cities.filter(city => city[0] === "W") //W๋ก ์์ํ๋ ๋์๋ง ๋ฝ์ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด์ฃผ์.
- ๋ฐฐ์ด์์ ์์๋ฅผ ์ ๊ฑฐํด์ผ ํ ๋ Array.pop์ด๋ Array.splice๋ณด๋ค๋ Array.filter๋ฅผ ์ฌ์ฉํ์. (Array.filter๋ ์์ ํจ์)
const cutCity = (cut, list) => list.filter(city => city !== cut)
2) Array.map
- Array.map์ ์ ์ด๊ฐ ์๋๋ผ ๋ณํ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๋๋ค.
- ํจ์๋ฅผ ๋ฐฐ์ด์ ๋ชจ๋ ์์์ ์ ์ฉํด์ ๋ฐํ๋ฐ์ ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง ์ ๋ฐฐ์ด์ ๋ฐํํด์ค๋ค.
const seoulCities = cities.map(city => '${city} in Seoul')
//map ํจ์๋ ๊ฐ ๋์ ์ด๋ฆ ๋ค์ Seoul์ ์ถ๊ฐํด์ค๋ค. ์ด๋ ์๋ณธ cities ๋ฐฐ์ด์ ์๋ฌด ๋ณํ๊ฐ ์๋ค.
const seoulCities = cities.map(city => ({name: city}))
//๋ฌธ์์ด์ ํฌํจํ๋ ๋ฐฐ์ด๋ก๋ถํฐ ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ ๋ฐฐ์ด์ ๋ง๋ ๋ค.
- ๋ฐฐ์ด์ ์์ ์ค ํ๋๋ง ๋ณ๊ฒฝํ๋ ์์ ํจ์๊ฐ ํ์ํ ๋๋ map์ ์ฌ์ฉ ํ ์ ์๋ค.
let cities = {
{ name: "์ค๋๊ตฌ"},
{ name: "๋๋๋ฌธ๊ตฌ"},
{ name: "๋
ธ์๊ตฌ"},
{ name: "๊ฐ๋จ๊ตฌ"}
}
let updatedSchools = editName("๋๋๋ฌธ๊ตฌ", "์๋๋ฌธ๊ตฌ", cities)
const editName = (oldName, name, arr) =>
arr.map(item => {
if(item.name === oldName){
return {
...item,
name
}
}
})
//editName ํจ์๋ ์๋ณธ ๋ฐฐ์ด์ ๊ทธ๋๋ก ๋ ์ฑ ํ๊ต ์ด๋ฆ์ด ๋ฐ๋ ์ ๋ฐฐ์ด์ ๋ฐํํด์ค๋ค.
์์์๋ Array.map์ ์ ๋ฌํ ๋ณํ ํจ์์ ํ๋ผ๋ฏธํฐ๊ฐ 1๊ฐ๋ฟ์ด์์ง๋ง, ๊ฐ ์์์ ์ธ๋ฑ์ค๋ฅผ ๋ณํ ํจ์์ ๋ ๋ฒ์งธ ์ธ์๋ก ๋๊ฒจ์ค ์ ์๋ค.
const editNth = (n, name, arr) =>
arr.map((item, i) => (i === n) ?
({...item, name}) :
item
)
let updateCities2 = editNth(2, "์๋๋ฌธ๊ตฌ", cities)
//2๋ฒ์งธ ์ธ์๋ฅผ ์๋๋ฌธ๊ตฌ๋ก ๋ฐ๊ฟ์ค๋ค.
3) Array.reduce
- ๊ฐ์ฒด๋ฅผ ์, ๋ฌธ์์ด, ๋ถ๋ฆฐ ๊ฐ, ๊ฐ์ฒด, ์ฌ์ง์ด ํจ์๋ก ๋ณํ์์ผ์ค๋ค.
const ages = [20,3,45,23,100,52]
const maxAge = ages.reduce((max,age) => {
if(age>max){
return age
} else{
return max
}
}, 0)
//์๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์์ ์ต๋๊ฐ์ ์ฐพ๋ ํจ์์ด๋ค. ๋ฐฐ์ด์ ํ๋์ ์๋ก ๋ณํํด์ผ ํ๋ฏ๋ก reduce๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ์์๊ฐ ์๋ ๋งจ ๋ง์ง๋ง ์์๋ถํฐ ์ถ์ฝ์ ์์ํ๊ธฐ ์ํด Array.reduceRight๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๐ Filter, Map, Reduce๋ฅผ ์ ์ฌ์ฉํด ๋ฐ์ดํฐ ๋ณํ์ ์ํด์ฃผ์!
๋ฐ์ํ
'Front-end > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ์์ ๋ฆฌ์กํธ (๊ฐ์ DOM, ๋ฆฌ์กํธ ์๋ฆฌ๋จผํธ, ReactDOM) (0) | 2020.07.06 |
---|---|
[React] ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ? (0) | 2020.07.06 |
[React] ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํต์ฌ ๊ฐ๋ - ๋ถ๋ณ์ฑ (0) | 2020.07.05 |
[React] ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋? (0) | 2020.07.05 |
[React] ์ฐจ๊ทผ์ฐจ๊ทผ Todo List ๋ง๋ค๊ธฐ with Typescript- (3) ListItem Component (0) | 2020.07.02 |