π Chapter 5 : λ°λ³΅λ¬Έμ λ¨μνκ² λ§λ€μ΄λΌ.
π― νμ΄ν ν¨μλ‘ λ°λ³΅λ¬Έμ λ¨μνκ² λ§λ€μ΄λΌ.β
-
λλΆλΆμ λ°λ³΅λ¬Έμ μ½λ°± ν¨μ(callback function)μ μμ‘΄νλ€.
-
νμ΄ν ν¨μ(arrow function)λ ν¨μκ° μ₯ν©ν΄μ§λ λ¬Έμ λ₯Ό ν΄κ²°ν΄μ ν¨μ μμ±μ κ°κ²°νκ³ μ§§κ² λ§λ€μ΄ μ€λ€.
-
νμ΄ν ν¨μλ νμνμ§ μμ μ 보λ₯Ό μ΅λν κ±·μ΄λΈλ€.
function
ν€μλ- μΈμλ₯Ό κ°μΈλ κ΄νΈ
return
ν€μλ- μ€κ΄νΈ
-
μλλ κ°λ¨ν ν¨μμ΄λ€. μ΄ ν¨μλ κΈ°λͺ ν¨μμ΄λ€. λν, ν¨μ μ μΈ(function declaration)μ΄λ€.
function capitalize(name) {
return name[0].toUpperCase() + name.slice(1);
}
- λ³μμ ν λΉν ν¨μ ννμ(function expression)μ μλμ κ°λ€.
const capitalize = function(name) {
return name[0].toUpperCase() + name.slice(1);
}
- μ¬κΈ°μ
function
ν€μλλ₯Ό μ κ±°νκ³ νμ΄νλ‘ λ체ν μ μλ€. λν, 맀κ°λ³μκ° νλλΏμ΄λΌλ©΄ κ΄νΈλ μ κ±°ν μ μλ€.
const capitalize = name => {
return name[0].toUpperCase() + name.slice(1);
}
- 맀κ°λ³μκ° λ κ° μ΄μ μ΄λ©΄ κ΄νΈλ₯Ό μ¬μ©ν΄μΌ νλ€.
const greet = (first, last) => {
return `μλ
νμΈμ! ${capitalize(first)} ${capitalize(last)}λ`;
}
- ν¨μλ₯Ό ν μ€λ‘λ§ μμ±ν λλ
return
ν€μλλ μ¬μ©ν νμκ° μλ€. μ¦, ν¨μ λͺΈμ²΄μ μ€ν κ²°κ³Όλ₯Ό μλμΌλ‘ λ°ννλ€.
const formatUser = name => `${capitalize(name)}λμ΄ λ‘κ·ΈμΈνμ΅λλ€.`;
- νμ΄ν ν¨μλ₯Ό λ³μμ ν λΉνμ§ μκ³ μ΅λͺ ν¨μλ‘ μ¬μ©ν μλ μλ€.
- μλ°μ€ν¬λ¦½νΈμμ ν¨μλ₯Ό λ€λ₯Έ ν¨μμ μΈμλ‘ μ λ¬ν μ μλ€. (μλ‘ μ½λ°± ν¨μλ₯Ό μΈμλ‘ νλ ν¨μ)
function applyCustomGreeting(name, callback) {
return callback(capitalize(name));
}
- μλ³Έ ν¨μλ₯Ό νΈμΆν λ μ΅λͺ ν¨μλ₯Ό μμ±ν λ°©λ²
- ν¨μ
applyCustomGreeting
λ₯Ό νΈμΆνλ©΄μ μ΅λͺ ν¨μλ₯Ό μμ±ν΄ μ λ¬.
applyCustomGreeting('mark', function(name) {
return `μλ
, ${name}!`;
});
// "μλ
, Mark!"
- μ μ½λμ μ΅λͺ ν¨μλ₯Ό νμ΄ν ν¨μλ‘ λ³κ²½ν μ μλ€.
applyCustomGreeting('mark', name => `μλ
, ${name}!`);
// "μλ
, Mark!"
π― λ°°μ΄ λ©μλλ‘ λ°λ³΅λ¬Έμ μ§§κ² μμ±νλΌ.β
for
λ¬Έκ³Όfor...of
λ¬Έλ μ’μ§λ§ μ κ² μ¬μ©νλ κ²μ΄ μ’λ€.for
λ¬Έκ³Όfor...of
λ¬Έμ λΆνμν μ λλ‘ μ΄μμ νκΈ° λλ¬Έμ΄λ€.- κ·Έλ κΈ° λλ¬Έμ λ°°μ΄ λ©μλλ₯Ό μ¬μ©νμ¬ λ°λ³΅λ¬Έμ ν μ€λ‘ μ€μΌ μ μλ€.
- μλμ μ½λλ
for
λ¬Έμ μ¬μ©νμλ€.
const prices = ['1.0', 'little prince', '2.15'];
const formattedPrices = [];
for(let i = 0; i < prices.length; i++) {
const price = parseFloat(prices[i]);
if(price){
formattedPrices.push(price);
}
}
// [1, 2.15]
- μ μ½λλ λ¨μνμ§ λͺ»νκ³ , κ°λ μ± λν μ½λκ° λμ΄λ μλ‘ λ¨μ΄μ§ κ²μ΄λ€.
- κ·Έλ λ€κ³ μμΈ‘ κ°λ₯ν μ½λλ μλλ€. μ½λμμ μμ±ν λΉ λ°°μ΄μ μμκ° μλλ―λ‘ λμ€μ λ³κ²½λ μλ μκ³ , κ·Έλ μ§ μμ μλ μλ€.
- μ΄λ¬ν μ½λλ₯Ό λ°°μ΄ λ©μλλ₯Ό μ¬μ©νλ©΄ λΆνμν λ°μ΄ν°λ₯Ό λ°°μ ν, κ°κ²°νκ³ μμΈ‘ κ°λ₯ν μ½λλ₯Ό λ§λ€ μ μλ€.
- κ±°μ λλΆλΆμ λ°°μ΄ λ©μλλ λ°νλλ λ°°μ΄μ κΈΈμ΄λ ννλ₯Ό λ³κ²½ν μ μλ€.
map()
: ννλ₯Ό λ°κΏ μ μμ§λ§ κΈΈμ΄λ μ μ§λλ€.sort()
: ννλ κΈΈμ΄λ λ³κ²½λμ§ μκ³ μμλ§ λ°κΎΌλ€.filter()
: κΈΈμ΄λ₯Ό λ³κ²½νμ§λ§ ννλ λ°κΎΈμ§ μλλ€.find()
: λ°°μ΄μ λ°ννμ§ μκ³ , ν κ°μ λ°μ΄ν°κ° λ°νλκ³ ννλ λ°λμ§ μλλ€.forEach()
: ννλ₯Ό μ΄μ©νμ§λ§ μ무κ²λ λ°ννμ§ μλλ€.reduce()
: κΈΈμ΄μ ννλ₯Ό λ°κΎΈλ κ²μ λΉλ‘―ν΄ λ¬΄μμ΄λ μ²λ¦¬ν μ μλ€.
- μμ μμ μ½λλ₯Ό λ°°μ΄ λ©μλλ₯Ό μ¬μ©νμ¬ μμ±ν μ μλ€.
const prices = ['1.0', 'little prince', '2.15'];
const formattedPrices = prices.map(price => parseFloat(price)).filter(price => price);
// [1, 2.15]
π― map() λ©μλλ‘ λΉμ·ν κΈΈμ΄μ λ°°μ΄μ μμ±νλΌ.β
- 맡 ν¨μλ μ λ ₯ν λ°°μ΄μ μ 보 μ€ ν μ‘°κ°μ λ°μ μλ‘μ΄ κ°μ λ°ννλ€.
- λλ‘λ μ 보μ μΌλΆλ₯Ό λ°ννκΈ°λ νκ³ , μ 보λ₯Ό λ³νν΄μ μλ‘μ΄ κ°μ λ°ννκΈ°λ νλ€.
- μ¦, λ°°μ΄μ μλ ν κ°μ§ μμ±μ λ°ννκ±°λ λ°°μ΄μ μλ κ°μ κ°μ Έμμ λ€λ₯Έ νμμ κ°μ λ°ννλ€.
- λ¨Όμ
for
λ¬ΈμΌλ‘ μμ±ν΄ 보μ.
const band = [
{ name: 'corbett', instrument: 'guitar' },
{ name: 'evan', instrument: 'guitar' },
{ name: 'sean', instrument: 'bass' },
{ name: 'brett', instrument: 'drums' },
];
const instruments = [];
for(let i = 0; i < band.length; i++) {
const instrument = band[i].instrument;
instruments.push(instrument);
}
for
λ¬Έ μμ μλ λ‘μ§μ ν¨μλ‘ λ°λ‘ λΆλ¦¬ν΄ μ€ μ μλ€.
function getInstrument(member) {
return member.instrument;
}
const instruments = [];
for(let i = 0; i < band.length; i++) {
instruments.push(getInstrument(band[i]));
}
- λλΆλΆμ κ²½μ° λ°°μ΄ λ©μλμλ μ΅λͺ ν¨μλ₯Ό μμ±νμ§λ§ νμμ μ΄μ§λ μλ€.
- νμνλ€λ©΄ κΈ°λͺ ν¨μλ₯Ό μ¬μ©ν μλ μλ€.
- μ΄μ
map()
λ°°μ΄ λ©μλλ₯Ό μ¬μ©ν΄for
λ¬Έμ μ¬μ©νμ§ μκ³ μ½λλ₯Ό μμ±ν μ μλ€.
function getInstrument(member) {
return member.instrument;
}
const instruments = band.map(getInstrument);
// ["guitar", "guitar", "bass", "drums"]
- μμ κΈ°λͺ ν¨μλ₯Ό μ΅λͺ ν¨μλ‘ λ°κΏ μ μλ€. νμ΄ν ν¨μλ₯Ό μ¬μ©νμ¬ λ³κ²½ν μ μλ€.
const instruments = band.map(member => member.instrument);
// ["guitar", "guitar", "bass", "drums"]
map()
λ©μλλ μλ³Έ λ°°μ΄κ³Ό κ°μ κΈΈμ΄μ λ°°μ΄μ μμ±νλ κ²½μ°λΌλ©΄ λͺ¨λ κ³³μ μ¬μ©ν μ μλ€.
π― filter()μ find()λ‘ λ°μ΄ν°μ λΆλΆμ§ν©μ μμ±νλΌ.β
filter()
λ©μλλmap()
λ©μλμ λ€λ₯΄κ² λ°°μ΄μ μλ μ 보λ₯Ό λ³κ²½νμ§ μκ³ λ°νλλ λ°°μ΄μ κΈΈμ΄λ₯Ό μ€μΈλ€.
const team = [
'Harang B',
'Dave L',
'Dave C',
'Seungmin B',
'Dain M',
];
- μ
team
λ°°μ΄μDav
λ₯Ό ν¬ν¨νλμ§ νμΈνκΈ° μν΄ λ¬Έμμ΄μmatch()
λ©μλλ₯Ό μ¬μ©ν΄μΌ νλ€. for
λ¬Έμ μ΄μ©ν μμ λ°©λ².
const daves = [];
for(let i = 0; i < team.length; i++) {
if(team[i].match(/Dav/)) {
daves.push(team[i]);
}
}
// ["Dave L", "Dave C"]
filter()
λ©μλλ μ λ¬νλ ν¨μλ λ°λμ μ°Έκ°μ λ°νν΄μΌ νλ€.- λ§μ½ μ°Έκ°μ λ°ννμ§ μμΌλ©΄ ν΄λΉ κ°μ μλ‘μ΄ λ°°μ΄μ λ΄κΈ°μ§ μλλ€.
- λν, λ°νλλ λ°°μ΄μ μλ³Έμ λ°°μ΄ μμλ κ·Έλλ‘ μ μ§νλ€.
- μ€μν μ μ
filter()
λ©μλλ νμ λ°°μ΄μ λ°ννλ©΄ 쑰건μ μΌμΉνμ§ μλ κ°μ΄ μλ κ²½μ°μλ λΉ λ°°μ΄μ λ°ννλ€.
const daves = team.filter(member => member.match(/Dav/));
- μ€λ‘μ§ μΌμΉνλ νλͺ©μ΄ νλλΏμΌ λλ
find()
λ©μλλ₯Ό μ¬μ©ν μ μλ€. find()
λ©μλλ μ°Έ λλ κ±°μ§ κ°μ λ°ννλ ν¨μλ₯Ό μΈμλ‘ νκ³ , λ°°μ΄μ νλͺ©μ μ λ¬ν ν¨μλ‘ νκ°ν΄ μ°Έκ°μ λ°ννλ 첫 λ²μ§Έ νλͺ©λ§ λ°ννλ€.- μ°Έκ°μ λ°ννλ νλͺ©μ΄ μλ€λ©΄ undefinedλ₯Ό λ°ννλ€.
const instructors = [
{ name: 'μΉλ―Ό', libraries: ['λ―Έλμ΄κ΅μ‘μ 보 λμκ΄'] },
{ name: 'λ€μΈ', libraries: ['κΈ°λ
λμκ΄', 'λ¬Ένμ 보ν λμκ΄'] },
{ name: 'νλ', libraries: ['μ€μ λμκ΄'] },
];
- μμ
instructors
λ°°μ΄μκΈ°λ λμκ΄
μΈ μ¬μλ₯Ό μ°ΎκΈ° μνfor
λ¬ΈμΌλ‘ μμ±ν λ°©λ².
let memorialInstructor;
for(let i = 0; i < instructors.length; i++) {
if(instructors[i].libraries.includes('κΈ°λ
λμκ΄')) {
memorialInstructor = instructors[i];
break;
}
}
find()
λ©μλλ₯Ό μ¬μ©ν λ°©λ²
const librarian = instructors.find(instructor => {
return instructor.libraries.includes('κΈ°λ
λμκ΄');
});
find()
λ©μλμ μ μΌν λ¨μ μ λ°νκ°μ νμ ν μ μλ€λ μ μ΄λ€.filter()
λ©μλλ₯Ό μ¬μ©νλ©΄ λΉ λ°°μ΄μ΄ λ°νλμ§λ§find()
λ©μλλ₯Ό μ¬μ©νλ©΄undefined
κ° λ°νλλ€.- κ·Έλ μ§λ§ λ¨λ½ νκ°λ₯Ό μ΄μ©νλ©΄ κΈ°λ³Έκ°μ μΆκ°ν΄μ μΌμΉνλ νλͺ©μ΄ μμ λ μ¬μ©ν μ μλ€.
const images = [{
path: './me.jpg',
profile: false,
}];
const profile = images.find(image => image.profile) || {
path: './default.jpg'
};
// {path: "./default.jpg"}
find()
λ©μλμ ν κ°μ§ μμ¬μ΄ μ μ λμκ΄ μ΄λ¦μΈ κΈ°λ λμκ΄μ νλ μ½λ©ν΄μΌ νλ€λ μ μ΄λ€.- λ°°μ΄ λ©μλμ μ½λ°± ν¨μλ μΈμκ° νλλΏμ΄λΌλ λ¬Έμ κ° μκΈ° λλ¬Έμ κ²μ¬ λμμΈ νλͺ© νλλ§ μΈμλ‘ λ°μ μ μλ€.
- 쑰건μ μΌμΉνλμ§ νμΈν λ³μκ° νμν΄μ λ λ²μ§Έ μΈμλ₯Ό μΆκ°ν΄μΌ ν λ λ¬Έμ κ° λ°μνλ€.
- μ΄λ° κ²½μ°μ 컀λ§μ΄λΌλ κΈ°λ²μ νμ©νλ©΄ μΈμμ μλ₯Ό νλλ‘ μ€μΌ μ μλ€.
const findByLibrary = library => instructor => {
return instructor.libraries.includes(library);
};
const librarian = instructors.find(findByLibrary('λ―Έλμ΄κ΅μ‘μ 보 λμκ΄'));
// {name: "μΉλ―Ό", libraries: ["λ―Έλμ΄κ΅μ‘μ 보 λμκ΄"]}
π― forEach()λ‘ λμΌν λμμ μ μ©νλΌ.β
forEach()
λ μ λ ₯ λ°°μ΄μ μ ν λ³κ²½νμ§ μκ³ , λͺ¨λ νλͺ©μ λμΌν λμμ μννλ€.
const sailingClub = [
'seung',
'min',
'Dain',
'Harang',
'jessi',
'alex',
];
- μμ
sailingClub
μ for λ¬Έμ μ¬μ©ν λ°©λ².
for(let i = 0; i < sailingClub.length; i++) {
sendEmail(sailingClub[i]);
}
- κ΅³μ΄
forEach()
λ₯Ό μ¬μ©νλ κ°μΉ μλ μ΄μ λ λ€λ₯Έ λ©μλμ²λΌ μ½λλ₯Ό λ¨μνκ² λ§λ€κΈ° λλ¬Έμ΄ μλλΌ, 그보λ€λ μμΈ‘ κ°λ₯νλ©΄μλ λ€λ₯Έ λ°°μ΄ λ©μλμ κ°μ΄ μλν΄ ν¨κ» μ°κ²°ν μ μκΈ° λλ¬Έμ κ°μΉκ° μλ κ²μ΄λ€. - μλ μ½λμ κ°μ΄
forEach()
λ©μλλ λΆμ ν¨κ³Ό μμ΄λ μ무 μμ©μ΄ μκΈ° λλ¬Έμ μ€νν΄λ μλ¬΄λ° λ³νκ° μλ€.
const names = ['walter', 'white'];
const capitalized = names.forEach(name => name.toUpperCase());
capitalized; // undefined
- μλ μμ μ½λμ²λΌ
capitalized
λ°°μ΄μ λ¬μ λλ¬Έμλ‘ λ³κ²½ν κ²°κ³Όλ₯Ό λ΄μ μ μκ² ν μ μμ§λ§, λ°°μ΄μ μ§μ μ‘°μνλ λ°©μμ μ’μ§ λͺ»νκ³ , μ΄λ¬ν μμ μmap()
λ©μλλ‘ μ²λ¦¬ν μ μκΈ° λλ¬ΈμforEach()
λ©μλλ₯Ό μ¬μ©ν νμκ° μλ€.
const names = ['walter', 'white'];
let capitalized = [];
names.forEach(name => capitalized.push(name.toUpperCase()));
capitalized; // ["WALTER", "WHITE"]
- κ·Έλ κΈ° λλ¬Έμ
forEach()
λ©μλλ₯Ό μ¬μ©νλ κ³³μ ν¨μμ μ ν¨ λ²μλ₯Ό λ²μ΄λλ μμ μ΄ νμν κ²½μ°μ΄λ€. - μ¦, λ°λμ λΆμ ν¨κ³Όκ° νμν κ²½μ°μ
forEach()
λ₯Ό μ¬μ©ν΄μΌ νλ€.
sailingClub.forEach(member => sendEmail(member));
- κ²°κ΅
forEach()
λ₯Ό μ¬μ©νλ κ°μ₯ ν° μμ μ μ½κ°μ μμΈ‘ κ°λ₯μ±μ μ»μ μ μλ€λ κ²μΌλ‘forEach()
λ©μλκ° μλ€λ©΄ λΆμ ν¨κ³Όλ₯Ό λ°μνλ€λ μ μ΄λ€. - κ°μ₯ ν° μ΄μ λ 체μ΄λ κ³Όμ μμ λ€λ₯Έ λ°°μ΄ λ©μλμ κ²°ν©ν μ μκΈ° λλ¬Έμ΄λ€.
π― 체μ΄λμΌλ‘ λ©μλλ₯Ό μ°κ²°νλΌ.β
- 체μ΄λ(method-chaining)μ κ°μ λ€μ ν λΉνμ§ μκ³ λ°νλ κ°μ²΄μ λ©μλλ₯Ό μ¦μ νΈμΆνλ κ²μ μλ―Ένλ€.
const sailors = [
{
name: 'seungmin',
active: true,
email: 'seungmin@naver.com',
},
{
name: 'dain',
active: true,
email: '',
},
{
name: 'harang',
active: false,
email: '',
},
];
- μ
sailors
λ°°μ΄μ μ΄μ©ν΄ νλμ΄ μλ νμμ μ μΈν΄ 보μ.
const active = sailors.filter(sailor => sailor.active);
// [
// {name: "seungmin", active: true, email: "seungmin@naver.com"},
// {name: "dain", active: true, email: ""}
// ]
- μ΄λ©μΌ μ£Όμλ₯Ό νμμ΄ μ΄λ©μΌμ κ°μ§κ³ μμΌλ©΄ ν΄λΉ μ΄λ©μΌμ μ¬μ©νκ³ , κ·Έλ μ§ μμΌλ©΄ κΈ°λ³Έ μ΄λ©μΌμ μ¬μ©νλ€.
const emails = active.map(member => member.email || `${member.name}@naver.com`);
// ["seungmin@naver.com", "dain@naver.com"]
- μ νν νμ μ 보λ₯Ό μ΄μ©ν΄
sendEmail
ν¨μλ₯Ό νΈμΆν μ μλ€.
emails.forEach(sailor => sendEmail(sailor));
- μμ μ½λλ€μ 체μ΄λμ μ¬μ©νμ¬ μ€κ° λ¨κ³λ₯Ό μ κ±°νκ³ λ³μλ₯Ό μ μΈνμ§ μκ³ λ λμΌν μμ μ μ²λ¦¬ν μ μλ€.
sailors
.filter(sailor => sailor.active)
.map(member => member.email || `${member.name}@naver.com`)
.forEach(sailor => sendEmail(sailor));
- λ©μλ 체μ΄λμ μ¬μ©ν λ μ£Όμ μ¬νμ λ§μ§λ§ λ¬Έμ₯κΉμ§ μΈλ―Έμ½λ‘ μ΄ μλ κ²μ νμΈν΄μΌ νλ€.
- ν κ°μ§ λ μ€μν μ μ μμλ₯Ό μ§μΌμΌ νλ€λ μ μ΄λ€.
π― reduce()λ‘ λ°°μ΄ λ°μ΄ν°λ₯Ό λ³ννλΌ.β
- λ°°μ΄ λ©μλκ° νλ₯ν μ΄μ λ μ½λ°± ν¨μλ₯Ό μ΄ν΄νκΈ° μ μλ κ²°κ΄κ°μ νλμ μμΈ‘ν μ μκΈ° λλ¬Έμ΄λ€.
- κ²λ€κ°, λ°°μ΄ λ©μλλ ν μ€νΈνκΈ° μ½λ€.
reduce()
λ©μλλ λ°°μ΄μ μ΄μ©ν΄μ κ·Όλ³Έμ μΌλ‘ λ€λ₯Έ μλ‘μ΄ λ°μ΄ν°λ₯Ό λ§λ€μ΄μΌ ν κ²½μ°λ νΉμ νλͺ©μ μκ° νμνκ±°λ, λ°°μ΄μ κ°μ²΄μ²λΌ λ€λ₯Έ ννμ μλ£κ΅¬μ‘°λ‘ λ³νν΄μΌ νλ κ²½μ°μ μ¬μ©λλ€.reduce()
λ©μλλ§μ κ°μ₯ μ€μν νΉμ§μ λ°°μ΄μ κΈΈμ λ°μ΄ν° ννλ₯Ό λͺ¨λ λλ κ°κ° λ³κ²½ν μ μλ€λ μ μ΄λ€.- λν,
reduce()
λ©μλλ λ°λμ λ°°μ΄μ λ°νν νμλ μλ€. - μλ μ½λλ
reduce()
λ©μλλ₯Ό μ¬μ©ν΄μ λμΌν λ°° μ΄μ λ°νν κ²μ΄λ€.
// reduce() λ©μλμ μ½λ°± ν¨μμ λ κ°μ μΈμλ₯Ό μ λ¬νλ€.
// collectedValues λ°νλλ νλͺ©
// item κ°λ³ νλͺ©
const callback = function (collectedValues, item) {
// λ°νκ°μ μ½λ°± ν¨μκ° λ°ννλ κ°μ λμ ν κ²
return [...collectedValues, item];
};
const saying = ['veni', 'vedi', 'veci'];
const initialValue = [];
const copy = saying.reduce(callback, initialValue); // ["veni", "vedi", "veci"]
reduce()
λ©μλκ° νΉλ³ν μ΄μ λ λ°νκ°μ μ μλΏ μλλΌ μΈνΈ κ°μ 컬λ μ λ λ μ μλ€.reduce()
λ©μλμ λ κ°μ§ κ°, μ¦ μ½λ°± ν¨μμ κΈ°λ³Έκ°μ μ λ¬λ°λλ€.- κΈ°λ³Έκ°μ μλ΅ν μλ μμ§λ§ λλΆλΆ μμ±νμ¬ λ°νκ°μ λ΄μ μ μλ€.
reduce()
λ©μλμμ κΉλ€λ‘μ΄ λΆλΆμ μ½λ°± ν¨μμμ νμ λμ λ κ°μ λ°νν΄μΌ νλ€λ μ μ΄λ€.
const dogs = [
{ name: 'ν μ΄ νΈλ€', color: 'κ°μ' },
{ name: 'λλΈλΌλλ νΈλ¦¬λ²', color: 'ν°μ' },
{ name: 'ν¬λ©λ¦¬μ', color: 'ν°μ' },
]
- μ
dogs
λ°°μ΄μ μ¬μ©νμ¬reduce()
λ‘ κ³ μ³κ°μ΄ λ΄κΈ΄ μ§ν©μ λ§λ€μ΄ 보μ.
const colors = dogs.reduce((colors, dog) => {
if(colors.includes(dog['color'])) {
return colors;
}
return [...colors, dog['color']];
}, []);
// ["κ°μ", "ν°μ"]
reduce()
λ©μλλ₯Ό νμ νκΈ° μν λ λ€λ₯Έ μ€μν μμλ μ΄κΉκ°μ΄ ν¨μμ μ λ¬λ ν μ΄λ»κ² λΆλ¦¬λμ§λ₯Ό μ΄ν΄νλ κ²μΌλ‘ λ³΄ν΅ **μΊλ¦¬(carry)**λΌκ³ λΆλ₯΄μ§λ§, λ¨μ§ 맀κ°λ³μμ΄κΈ° λλ¬Έμ μνλ λλ‘ μ΄λ¦μ λΆμΌ μ μλ€. (μ¬κΈ°μλcolors
)- ν¨μ λͺΈμ²΄λ₯Ό μ΄ν΄λ³΄μ§ μμλ, λ€λ₯Έ λ°°μ΄μ΄ λ°νλλ€λ μ μ μ΄λ―Έ μ μ μκΈ° λλ¬Έμ νμ λμ κ°μ λͺ μμ μΌλ‘ μμ±ν΄μΌ νλ€.
- λν, μ£Όμν μ μ λμ κ°μ λ°ννμ§ μμΌλ©΄ κ°μ μμ ν μ¬λΌμ§λ€.
const colors = dogs.reduce((colors, dog) => {
if(colors.includes(dog['color'])) {
return colors;
}
[...colors, dog['color']];
}, []);
// Uncaught TypeError: Cannot read property 'includes' of undefined
reduce()
λ©μλλ λ°μ΄ν°μ ν¬κΈ°μ ννλ₯Ό λͺ¨λ λ³κ²½ν μ μκΈ° λλ¬Έμ λ€λ₯Έ λ°°μ΄ λ©μλλ₯Ό λ€μ λ§λ€ μλ μλ€.- μλ μ½λλ μμλ§ λͺ¨μ λ
map()
λ©μλλ₯Ό μ¬μ©ν μ μλ€.
const colors = dogs.map(dog => dog['color']); // ["κ°μ", "ν°μ", "ν°μ"]
reduce()
λ©μλλ₯Ό μ΄μ©ν΄μ κ°μ κ²°κ³Όλ₯Ό μ»μ μ μλ€.
const colors = dogs.reduce((colors, dog) => {
return [...colors, dog['color']];
},[]);
// ["κ°μ", "ν°μ", "ν°μ"]
map()
μΌλ‘λ κ²°κ³Όκ°μ κ°κ² ν μ μλλ° κ³ μ κ°μ λΆλ¦¬ν λreduce()
λ©μλλ₯Ό μ¬μ©νλ μ΄μ λ 리λμ(reducer)κ° λ λ§μ κ°μ μ½κ² λ€λ£° μ μλλ‘ μ½λμ μ μ°μ±μ μ 곡νκΈ° λλ¬Έμ΄λ€.
const filters = dogs.reduce((filters, item) => {
filters.breed.add(item['name']);
filters.color.add(item['color']);
return filters;
},
{
breed: new Set(),
color: new Set(),
});
filters
κ²°κ³Όκ°
;
- λ°μ΄ν°μ ν¬κΈ°μ ννλ₯Ό λμμ λ°κΏ μ μμΌλ―λ‘ μ¬μ© λ°©λ²μ΄ 무κΆλ¬΄μ§νλ€.
const developers = [
{ name: 'sa', language: 'javascript' },
{ name: 'seungmin', language: 'typescript' },
{ name: 'dain', language: 'java' },
{ name: 'harang', language: 'javascript' },
];
- μ
developers
λ°°μ΄λ‘reduce()
μΈμ΄λ³λ‘ λͺ λͺ μΈμ§ νμΈν μ μλ€.
const aggregated = developers.reduce((specialities, developer) => {
const count = specialities[developer.language] || 0;
return {
...specialities,
[developer.language]: count + 1,
};
},{});
// {javascript: 2, typescript: 1, java: 1}
π― for...in λ¬Έκ³Ό for...of λ¬ΈμΌλ‘ λ°λ³΅λ¬Έμ μ 리νλΌ.β
for...of
λ¬Έμ μ΄μ©ν΄μ κ°μ²΄μ λν λ°λ³΅λ¬Έμ ν΅ν΄ λ°λ³΅λ¬Έμ λͺ λ£μ±μ μ μ§ν μ μλ€.for...in
λ¬Έμ μ΄μ©ν΄μ μ΄ν°λ¬λΈμ λν λ°λ³΅λ¬Έμ μ¬μ©ν μ μλ€.
- μμ΄λΉμ€λΉ(Airbnb)μ μ€νμΌ κ°μ΄λλ νμ λ°°μ΄ λ©μλλ₯Ό μ¬μ©νκ³
for...of
λ¬Έκ³Όfor...in
λ¬Έμ μ¬μ©μ μ νν΄μΌ νλ€κ³ μ£Όμ₯νλ€. (μ°Έκ³ )- κ·Έλ μ§λ§ λͺ¨λ μ¬λμ΄ μ΄μ λμνμ§λ μλλ€. λλ‘λ μλ£κ΅¬μ‘°λ₯Ό λ°°μ΄λ‘ λ³ννλλΌ κ³ μνλ κ²λ³΄λ€λ λ€λ₯Έ λ°©λ²μ μ°Ύμ보λ κ²μ΄ λμ μλ μλ€.
- μλ μμ μ½λλ 맡μ μ¬μ©ν΄μ μ¬μ©μκ° μ΅μ μ ν΄λ¦ν λ λ€μν νμ¬λ₯Ό λ΄μ κ²μ΄κ³ , μ 보λ₯Ό κ³μν΄μ μΆκ°νκ³ μμ νλ μμ μ΄λ―λ‘ λ§΅μ μ¬μ©νλ©΄ μ½κ² μ²λ¦¬ν μ μλ€.
const firms = new Map()
.set(10, 'Ivie Group')
.set(23, 'Soundscaping Source')
.set(31, 'Big 6');
- μ¬μ©μμ¬ μ νν νμ¬λ₯Ό μννλ©΄μ μ΄μ©ν μ μλ νμ¬μΈμ§ νμΈνλ€.(λ€λ₯Έ κ³³μμ μ μν
isAvailabel()
ν¨μλ₯Ό μ¬μ©.)
const entries = [...firms];
for(let i = 0; i < entries.length; i++){
const [id, name] = entries[i];
if(!isAvailable(id)) {
return `${name}λ μ¬μ©ν μ μμ΅ λλ€.`;
}
}
return 'λͺ¨λ νμ¬λ₯Ό μ¬μ©ν μ μμ΅λλ€.';
- μ
for
λ¬ΈμΌλ‘ λμ΄μλ λ°λ³΅λ¬Έμfind()
λ©μλλ₯Ό μ¬μ©ν΄μ μλΉμ€λ₯Ό μ 곡νμ§ λͺ»νλ νμ¬κ° μλμ§ νμΈν μ μλ€.
const unavailable = [...firms].find(firm => {
const [id] = firm;
return !isAvailable(id);
});
if(unavailable) {
return `${unavailable[1]}λ μ¬μ©ν μ μμ΅λλ€.`;
}
return 'λͺ¨λ νμ¬λ₯Ό μ¬μ©ν μ μμ΅λλ€.';
reduce()
λ©μλλ₯Ό μ¬μ©ν΄μ λ©μμ§λ₯Ό λ°νν μλ μλ€.
const message = [...firms].reduce((availability, firm) => {
const [id, name] = firm;
if(!isAvailable(id)) {
return `${name}λ μ¬μ©ν μ μμ΅λλ€.`;
}
return availability;
},'λͺ¨λ νμ¬λ₯Ό μ¬μ©ν μ μμ΅λλ€.');
return message;
- μ΄ λ°©λ²λ€μ λ¬Έμ κ° λλ λΆλΆμ΄ μλ€.
find()
λ©μλλ₯Ό μ΄μ©νλ©΄ μ΄μ©ν μ μλ νμ¬κ° μλμ§ νμΈνκ³ λ©μμ§λ₯Ό λ°ννλ λ λ¨κ³λ₯Ό κ±°μ³μΌ νκ³reduce()
λ©μλλ₯Ό μ¬μ©νλ©΄ μ½λλ₯Ό μ΄ν΄νκΈ° μ’ μ΄λ ΅λ€. - λν,
find()
λ©μλλ μ΄μ©μ΄ λΆκ°λ₯ν νμ¬ μ€ μ²« λ²μ§Έ νμ¬λ§ μ°Ύμ μ μκ³ ,reduce()
λ©μλλ λ§μ§λ§ νμ¬λ§ μ°Ύμ μ μλ€. - 맡μ νΌμΉ¨ μ°μ°μλ₯Ό μ¬μ©ν μ μκ² ν΄μ£Όλ 맡 μ΄ν°λ μ΄ν°λΌλ μμ±μ΄ μ‘΄μ¬νλλ°, μ΄ μμ±μ΄ 맡μ μ§μ μνν μ μκ² ν΄μ€λ€.
- κ·Έλ κΈ° λλ¬Έμ
for...of
λ¬ΈμΌλ‘ μ΄ν°λ μ΄ν°λ₯Ό μ¬μ©ν μ μλ€.
for(const firm of firms) {
const [id, name] = firm;
if(!isAvailable(id)) {
return `${name}λ μ¬μ©ν μ μμ΅λλ€.`;
}
}
return 'λͺ¨λ νμ¬λ₯Ό μ¬μ©ν μ μμ΅λλ€.';
for...of
λ¬Έμ λ°λ³΅λ¬ΈμΌλ‘ 무μμ΄λ ν μ μκΈ° λλ¬Έμ μμΈ‘ κ°λ₯μ±μ΄ μ€μ΄λλ λ¬Έμ κ° μλ€.- 컬λ μ μ μνν λ νν λ²μ΄μ§λ 컬λ μ μ‘°μλ§ νμ§ μλλ€λ©΄, μμΈ‘ κ°λ₯μ±μ΄ μ€μ΄λλ κ²μ μ΄ λ°©μμ μ μΌν λ¬Έμ μ΄λ€.
for...of
λ¬Έμ λ°λμ νμν κ²½μ°μλ§ μ¬μ©νλ κ²μ΄ μ’λ€.for...in
λ¬Έμfor...of
λ¬Έκ³Ό λ§€μ° μ μ¬νλ€.for...in
λ¬Έμ κ°μ²΄μ νμν μμ μ μ§μ μ€ννκΈ° λλ¬ΈμObject.key()
λ₯Ό μ€νν΄μ κ°μ²΄μ ν€λ₯Ό λ°°μ΄λ‘ λ³ννλ κ³Όμ μ μλ΅ν μ μλ€. λ μ νν λ§νλ©΄ κ°μ²΄μ μμ±μ μννλ€.
- κ°μ²΄λ νλ‘ν νμ 체μΈμ μλ λ€λ₯Έ κ°μ²΄μμ μμ±μ μμλ°κ³ , κ°μ²΄μλ μ΄κ±°ν μ μλ μμ±μ΄ μμ΄ μνμμ μ μΈλκΈ°λ νλ€.
- μ¦, κ°μ²΄μ μμ±μ λ¨μνμ§ μλ€. (MDNμμ μ체 μμ±λ§ λ°λ³΅ μ°Έκ³ )
- κ·Έλ κΈ° λλ¬Έμ 맡μ κ°μ²΄λ‘ λ³κ²½ν΄ μ€λ€.
const firms = {
'10': 'Ivie Group',
'23': 'Soundscaping Source',
'31': 'Big 6',
};
for...in
λ¬Έμ μ¬μ©ν΄μ λ³κ²½ν μ μλ€.
for(const id in firms) {
if(!isAvailable(parseInt(id, 10))) {
return `${firms[id]}λ μ¬μ©ν μ μμ΅λλ€.`;
}
}
return 'λͺ¨λ νμ¬λ₯Ό μ¬μ©ν μ μμ΅λλ€.';
for...in
λ¬Έλ λ§μ°¬κ°μ§λ‘ 무쑰건μ μΌλ‘ μ¬μ©νμ§ λ§κ³ μ¬μ©μ΄ μ μ ν κ²½μ°μλ§ μ ννλ κ²μ΄ μ’λ€.- ν€λ§ νμν κ²½μ°μλ λ°°μ΄ λ©μλλ₯Ό μ¬μ©νκΈ° μ μ
Object.key()
λ‘ ν€λ₯Ό κ°μ Έμ€λ κ²μ΄ λ λμ μλ μλ€. - κ°λ§ νμν κ²½μ°λ λ§μ°¬κ°μ§λ‘
Object.value()
λ₯Ό μ¬μ©νλ€. - μ¬κΈ°μ λ μ£Όμν΄μΌ ν μ¬νμ κ°μ²΄λ₯Ό μννλ©΄μ κ°μ²΄λ₯Ό μ‘°μνλ©΄ μ λλ€.
- κ°μ²΄λ₯Ό μ‘°μνλ κ²μ λ§€μ° μννκ³ , νΉν λ°λ³΅ μ€μΈ μμ± μΈμ λ€λ₯Έ μμ±μ μΆκ°νκ±°λ μμ νλ κ²½μ°μλ λ²κ·Έκ° λΉ λ₯΄κ² νΌμ§ μ μλ€.