ë°°ì´ì ë¤ìí ë©ìë를 ì ê³µí©ëë¤. íìµ í¸ì를 ìí´ ë³¸ ì±í°ìì ë°°ì´ ë©ìë를 ëª ê°ì 그룹ì¼ë¡ ëë ìê°íëë¡ íê² ìµëë¤.
ìì ì¶ê°Â·ì ê±° ë©ìë
ë°°ì´ì 맨 ìì´ë ëì ìì(item)를 ì¶ê°íê±°ë ì ê±°íë ë©ìëë ì´ë¯¸ íìµí ë° ììµëë¤.
arr.push(...items)â 맨 ëì ìì ì¶ê°arr.pop()â 맨 ë ìì ì ê±°arr.shift()â 맨 ì ìì ì ê±°arr.unshift(...items)â 맨 ìì ìì ì¶ê°
ì´ ì¸ì ìì ì¶ê°ì ì ê±°ì ê´ë ¨ë ë©ìë를 ììë´ ìë¤.
splice
ë°°ì´ìì ìì를 íëë§ ì§ì°ê³ ì¶ë¤ë©´ ì´ë»ê² í´ì¼ í ê¹ì?
ë°°ì´ ìì ê°ì²´íì ìíë¯ë¡ íë¡í¼í°ë¥¼ ì§ì¸ ë ì°ë ì°ì°ì delete를 ì¬ì©í´ ë³¼ ì ìì ê²ëë¤.
let arr = ["I", "go", "home"];
delete arr[1]; // "go"를 ìì í©ëë¤.
alert( arr[1] ); // undefined
// delete를 ì¨ì ìì를 ì§ì°ê³ ë í ë°°ì´ --> arr = ["I", , "home"];
alert( arr.length ); // 3
ìíë ëë¡ ìì를 ì§ì ì§ë§ ë°°ì´ì ììë ì¬ì í ì¸ ê°ì´ë¤ì. arr.length == 3ì íµí´ ì´ë¥¼ íì¸í ì ììµëë¤.
ì´ë ìì°ì¤ë¬ì´ ê²°ê³¼ì
ëë¤. delete obj.keyë key를 ì´ì©í´ í´ë¹ í¤ì ììíë ê°ì ì§ì°ê¸° ë문ì´ì£ . delete ë©ìëë ì ìí ì ë¤ í ê²ì
ëë¤. ê·¸ë°ë° ì°ë¦¬ë ìì ë ììê° ë§ë ë¹ ê³µê°ì ëë¨¸ì§ ììë¤ì´ ìëì¼ë¡ ì±ì¸ ê²ì´ë¼ 기ëíë©° ì´ ë©ìë를 ì¼ìµëë¤. ë°°ì´ì 길ì´ê° ë ì§§ìì§ê¸¸ 기ëíë©° ë§ì´ì£ .
ì´ë° 기ë를 충족íë ¤ë©´ í¹ë³í ë©ìë를 ì¬ì©í´ì¼ í©ëë¤.
arr.splice(start)ë ë§ë¥ ì¤ìì¤ ë§¥ê°ì´ë² ì¹¼ ê°ì ë©ìëì ëë¤. ìì를 ìì ìì¬ë¡ ë¤ë£° ì ìê² í´ì£¼ì£ . ì´ ë©ìë를 ì¬ì©íë©´ ìì ì¶ê°, ìì , êµì²´ê° 모ë ê°ë¥í©ëë¤.
문ë²ì ë¤ìê³¼ ê°ìµëë¤.
arr.splice(index[, deleteCount, elem1, ..., elemN])
첫 ë²ì§¸ 매ê°ë³ìë ì¡°ìì ê°í 첫 ë²ì§¸ ìì를 ê°ë¦¬í¤ë ì¸ë±ì¤(index)ì
ëë¤. ë ë²ì§¸ 매ê°ë³ìë deleteCountë¡, ì ê±°íê³ ì íë ììì ê°ì를 ëíë
ëë¤. elem1, ..., elemNì ë°°ì´ì ì¶ê°í ìì를 ëíë
ëë¤.
splice ë©ìë를 ì¬ì©í´ ìì±ë ìì ëª ê°ì§ë¥¼ ë³´ì¬ëë¦¬ê² ìµëë¤.
먼ì ìì ìì ì ê´í ììë¶í° ì´í´ë³´ê² ìµëë¤.
let arr = ["I", "study", "JavaScript"];
arr.splice(1, 1); // ì¸ë±ì¤ 1ë¶í° ìì í ê°ë¥¼ ì ê±°
alert( arr ); // ["I", "JavaScript"]
ì½ì£ ? ì¸ë±ì¤ 1ì´ ê°ë¦¬í¤ë ììë¶í° ììí´ ìì í ê°(1)를 ì§ì ìµëë¤.
ë¤ì ìììì ìì ì¸ ê°(3)를 ì§ì°ê³ , ê·¸ ì리를 ë¤ë¥¸ ìì ë ê°ë¡ êµì²´í´ ë³´ëë¡ íê² ìµëë¤.
let arr = ["I", "study", "JavaScript", "right", "now"];
// ì²ì(0) ì¸ ê°(3)ì ìì를 ì§ì°ê³ , ì´ ì리를 ë¤ë¥¸ ììë¡ ëì²´í©ëë¤.
arr.splice(0, 3, "Let's", "dance");
alert( arr ) // now ["Let's", "dance", "right", "now"]
spliceë ìì ë ììë¡ êµ¬ì±ë ë°°ì´ì ë°íí©ëë¤. ìë ìì를 íµí´ íì¸í´ ë´
ìë¤.
let arr = ["I", "study", "JavaScript", "right", "now"];
// ì²ì ë ê°ì ìì를 ìì í¨
let removed = arr.splice(0, 2);
alert( removed ); // "I", "study" <-- ìì ë ììë¡ êµ¬ì±ë ë°°ì´
splice ë©ìëì deleteCount를 0ì¼ë¡ ì¤ì íë©´ ìì를 ì ê±°íì§ ìì¼ë©´ì ìë¡ì´ ìì를 ì¶ê°í ì ììµëë¤.
let arr = ["I", "study", "JavaScript"];
// ì¸ë±ì¤ 2ë¶í°
// 0ê°ì ìì를 ìì í©ëë¤.
// ê·¸ í, "complex"ì "language"를 ì¶ê°í©ëë¤.
arr.splice(2, 0, "complex", "language");
alert( arr ); // "I", "study", "complex", "language", "JavaScript"
slice ë©ìë ë¿ë§ ìëë¼ ë°°ì´ ê´ë ¨ ë©ìëì ìì ì¸ë±ì¤ë¥¼ ì¬ì©í ì ììµëë¤. ì´ë ë§ì´ëì¤ ë¶í¸ ìì ì«ìë ë°°ì´ ëììë¶í° ì¼ ìì ìì¹ë¥¼ ëíë ëë¤. ìëì ê°ì´ ë§ì´ì£ .
let arr = [1, 2, 5];
// ì¸ë±ì¤ -1ë¶í° (ë°°ì´ ëììë¶í° 첫 ë²ì§¸ ìì)
// 0ê°ì ìì를 ìì íê³
// 3ê³¼ 4를 ì¶ê°í©ëë¤.
arr.splice(-1, 0, 3, 4);
alert( arr ); // 1,2,3,4,5
slice
arr.sliceë arr.spliceì ì ì¬í´ ë³´ì´ì§ë§ í¨ì¬ ê°ë¨í©ëë¤.
문ë²:
arr.slice([start], [end])
ì´ ë©ìëë "start" ì¸ë±ì¤ë¶í° ("end"를 ì ì¸í) "end"ì¸ë±ì¤ê¹ì§ì ìì를 ë³µì¬í ìë¡ì´ ë°°ì´ì ë°íí©ëë¤. startì endë ë ë¤ ììì¼ ì ìëë° ì´ë, ë°°ì´ ëììë¶í°ì ìì ê°ì를 ì미í©ëë¤.
arr.sliceë 문ìì´ ë©ìëì¸ str.sliceì ì ì¬íê² ëìíëë° arr.sliceë ìë¸ ë¬¸ìì´(substring) ëì ìë¸ ë°°ì´(subarray)ì ë°ííë¤ë ì ì´ ë¤ë¦
ëë¤.
ìì:
let arr = ["t", "e", "s", "t"];
alert( arr.slice(1, 3) ); // e,s (ì¸ë±ì¤ê° 1ì¸ ììë¶í° ì¸ë±ì¤ê° 3ì¸ ììê¹ì§ë¥¼ ë³µì¬(ì¸ë±ì¤ê° 3ì¸ ììë ì ì¸))
alert( arr.slice(-2) ); // s,t (ì¸ë±ì¤ê° -2ì¸ ììë¶í° ì ì¼ ë ììê¹ì§ë¥¼ ë³µì¬)
arr.slice()ë ì¸ì를 íëë ëê¸°ì§ ìê³ í¸ì¶íì¬ arrì ë³µì¬ë³¸ì ë§ë¤ ì ììµëë¤. ì´ë° ë°©ìì 기존ì ë°°ì´ì ê±´ëë¦¬ì§ ìì¼ë©´ì ë°°ì´ì ì¡°ìí´ ìë¡ì´ ë°°ì´ì ë§ë¤ê³ ì í ë ì주 ì¬ì©ë©ëë¤.
concat
arr.concatì 기존 ë°°ì´ì ìì를 ì¬ì©í´ ìë¡ì´ ë°°ì´ì ë§ë¤ê±°ë 기존 ë°°ì´ì ìì를 ì¶ê°íê³ ì í ë ì¬ì©í ì ììµëë¤.
문ë²ì ë¤ìê³¼ ê°ìµëë¤.
arr.concat(arg1, arg2...)
ì¸ìì ë°°ì´ì´ë ê°ì´ ì¬ ì ìëë°, ì¸ì ê°ìì ì íì´ ììµëë¤.
ë©ìë를 í¸ì¶íë©´ arrì ìí 모ë ììì arg1, arg2 ë±ì ìí 모ë ìì를 íë° ëª¨ì ìë¡ì´ ë°°ì´ì´ ë°íë©ëë¤.
ì¸ì argNê° ë°°ì´ì¼ ê²½ì° ë°°ì´ì 모ë ììê° ë³µì¬ë©ëë¤. ê·¸ë ì§ ììê²½ì°(ë¨ì ê°ì¸ ê²½ì°)ë ì¸ìê° ê·¸ëë¡ ë³µì¬ë©ëë¤.
ìì:
let arr = [1, 2];
// arrì ìì 모ëì [3,4]ì ìì 모ë를 íë° ëª¨ì ìë¡ì´ ë°°ì´ì´ ë§ë¤ì´ì§ëë¤.
alert( arr.concat([3, 4]) ); // 1,2,3,4
// arrì ìì 모ëì [3,4]ì ìì 모ë, [5,6]ì ìì 모ë를 모ì ìë¡ì´ ë°°ì´ì´ ë§ë¤ì´ì§ëë¤.
alert( arr.concat([3, 4], [5, 6]) ); // 1,2,3,4,5,6
// arrì ìì 모ëì [3,4]ì ìì 모ë, 5ì 6ì íë° ëª¨ì ìë¡ì´ ë°°ì´ì´ ë§ë¤ì´ì§ëë¤.
alert( arr.concat([3, 4], 5, 6) ); // 1,2,3,4,5,6
concat ë©ìëë ì ê³µë°ì ë°°ì´ì ìì를 ë³µì¬í´ íì©í©ëë¤. ê°ì²´ê° ì¸ìë¡ ëì´ì¤ë©´ (ë°°ì´ì²ë¼ ë³´ì´ë ì ì¬ ë°°ì´ ê°ì²´ì´ëë¼ë) ê°ì²´ë ë¶í´ëì§ ìê³ íµì¼ë¡ ë³µì¬ëì´ ëí´ì§ëë¤.
let arr = [1, 2];
let arrayLike = {
0: "something",
length: 1
};
alert( arr.concat(arrayLike) ); // 1,2,[object Object]
ê·¸ë°ë° ì¸ìë¡ ë°ì ì ì¬ ë°°ì´ ê°ì²´ì í¹ìí íë¡í¼í° Symbol.isConcatSpreadableì´ ìì¼ë©´ concatì ì´ ê°ì²´ë¥¼ ë°°ì´ì²ë¼ ì·¨ê¸í©ëë¤. ë°ë¼ì ê°ì²´ ì ì²´ê° ìë ê°ì²´ íë¡í¼í°ì ê°ì´ ëí´ì§ëë¤.
let arr = [1, 2];
let arrayLike = {
0: "something",
1: "else",
[Symbol.isConcatSpreadable]: true,
length: 2
};
alert( arr.concat(arrayLike) ); // 1,2,something,else
forEachë¡ ë°ë³µìì í기
arr.forEachë 주ì´ì§ í¨ì를 ë°°ì´ ìì ê°ê°ì ëí´ ì¤íí ì ìê² í´ì¤ëë¤.
문ë²:
arr.forEach(function(item, index, array) {
// ììì 무ì¸ê°ë¥¼ í ì ììµëë¤.
});
ìëë ìì 모ë를 ì¼ë¿ì°½ì íµí´ ì¶ë ¥í´ì£¼ë ì½ëì ëë¤.
// for each element call alert
["Bilbo", "Gandalf", "Nazgul"].forEach(alert);
ìëë ì¸ë±ì¤ ì ë³´ê¹ì§ ëí´ì ì¶ë ¥í´ì£¼ë ì¢ ë ì êµí ì½ëì ëë¤.
["Bilbo", "Gandalf", "Nazgul"].forEach((item, index, array) => {
alert(`${item} is at index ${index} in ${array}`);
});
ì°¸ê³ ë¡, ì¸ìë¡ ëê²¨ì¤ í¨ìì ë°íê°ì 무ìë©ëë¤.
ë°°ì´ íìí기
ë°°ì´ ë´ìì 무ì¸ê°ë¥¼ ì°¾ê³ ì¶ì ë ì°ë ë©ìëì ëí´ ììë´ ìë¤.
indexOf, lastIndexOfì includes
arr.indexOfì arr.lastIndexOf, arr.includesë ê°ì ì´ë¦ì ê°ì§ 문ìì´ ë©ìëì 문ë²ì´ ëì¼í©ëë¤. ë¬¼ë¡ íë ì¼ë ê°ìµëë¤. ì°ì° ëìì´ ë¬¸ìì´ì´ ìë ë°°ì´ì ììë¼ë ì ë§ ë¤ë¦ ëë¤.
arr.indexOf(item, from)ë ì¸ë±ì¤fromë¶í° ììí´item(ìì)ì ì°¾ìµëë¤. ìì를 ë°ê²¬íë©´ í´ë¹ ììì ì¸ë±ì¤ë¥¼ ë°ííê³ , ë°ê²¬íì§ ëª»íì¼ë©´-1ì ë°íí©ëë¤.arr.lastIndexOf(item, from)ë ì ë©ìëì ëì¼í 기ë¥ì íëë°, ê²ìì ëììë¶í° ììíë¤ë ì ë§ ë¤ë¦ ëë¤.arr.includes(item, from)ë ì¸ë±ì¤fromë¶í° ììí´itemì´ ìëì§ë¥¼ ê²ìíëë°, í´ë¹íë ìì를 ë°ê²¬íë©´true를 ë°íí©ëë¤.
ìì:
let arr = [1, 0, false];
alert( arr.indexOf(0) ); // 1
alert( arr.indexOf(false) ); // 2
alert( arr.indexOf(null) ); // -1
alert( arr.includes(1) ); // true
ì ë©ìëë¤ì ìì를 ì°¾ì ë ìì íë± ì°ì°ì === ì ì¬ì©íë¤ë ì ì ì ìíì기 ë°ëëë¤. ë³´ìë ë°ì ê°ì´ false를 ê²ìíë©´ ì íí falseë§ì ê²ìíì§, 0ì ê²ìíì§ ììµëë¤.
ììì ìì¹ë¥¼ ì íí ìê³ ì¶ìê² ìëê³ ììê° ë°°ì´ ë´ ì¡´ì¬íëì§ ì¬ë¶ë§ íì¸íê³ ì¶ë¤ë©´ arr.includes를 ì¬ì©íë ê² ì¢ìµëë¤.
includesë NaNë ì ëë¡ ì²ë¦¬íë¤ë ì ìì indexOf/lastIndexOfì ì½ê°ì ì°¨ì´ê° ììµëë¤.
const arr = [NaN];
alert( arr.indexOf(NaN) ); // -1 (ìì íë± ë¹êµ === ë NaNì ëìíì§ ìì¼ë¯ë¡ 0ì´ ì¶ë ¥ëì§ ììµëë¤.)
alert( arr.includes(NaN) );// true (NaNì ì¬ë¶ë¥¼ íì¸íììµëë¤.)
findì findIndex
ê°ì²´ë¡ ì´ë£¨ì´ì§ ë°°ì´ì´ ìë¤ê³ ê°ì í´ ë´ ìë¤. í¹ì ì¡°ê±´ì ë¶í©íë ê°ì²´ë¥¼ ë°°ì´ ë´ìì ì´ë»ê² ì°¾ì ì ììê¹ì?
ì´ë´ ë arr.find(fn)ì ì¬ì©í ì ììµëë¤.
문ë²:
let result = arr.find(function(item, index, array) {
// trueê° ë°íëë©´ ë°ë³µì´ ë©ì¶ê³ í´ë¹ ìì를 ë°íí©ëë¤.
// ì¡°ê±´ì í´ë¹íë ììê° ìì¼ë©´ undefined를 ë°íí©ëë¤.
});
ìì ì 체를 ëìì¼ë¡ í¨ìê° ìì°¨ì ì¼ë¡ í¸ì¶ë©ëë¤.
itemâ í¨ì를 í¸ì¶í ììindexâ ììì ì¸ë±ì¤arrayâ ë°°ì´ ì기 ìì
í¨ìê° ì°¸ì ë°ííë©´ íìì ì¤ë¨ëê³ í´ë¹ ììê° ë°íë©ëë¤. ìíë ìì를 ì°¾ì§ ëª»íì¼ë©´ undefinedê° ë°íë©ëë¤.
idì name íë¡í¼í°ë¥¼ ê°ì§ ì¬ì©ì ê°ì²´ë¡ 구ì±ë ë°°ì´ì ìë¡ ë¤ì´ë³´ê² ìµëë¤. ë°°ì´ ë´ìì id == 1 ì¡°ê±´ì 충족íë ì¬ì©ì ê°ì²´ë¥¼ ì°¾ìë´
ìë¤.
let users = [
{id: 1, name: "John"},
{id: 2, name: "Pete"},
{id: 3, name: "Mary"}
];
let user = users.find(item => item.id == 1);
alert(user.name); // John
ì¤ë¬´ìì ê°ì²´ë¡ 구ì±ë ë°°ì´ì ë¤ë¤ì¼ í ì¼ì´ ì¦ê¸° ë문ì find ë©ìë íì©ë²ì ììëë©´ ì¢ìµëë¤.
ê·¸ë°ë° ì ìììì find ìì í¨ìê° ì¸ì를 íëë§ ê°ì§ê³ ìë¤ë ì ì 주목í´ì£¼ì기 ë°ëëë¤(item => item.id == 1). ì´ë° í¨í´ì´ ê°ì¥ ë§ì´ ì¬ì©ëë í¸ì
ëë¤. ë¤ë¥¸ ì¸ìë¤(index, array)ì ì ì¬ì©ëì§ ììµëë¤.
arr.findIndexë findì ëì¼í ì¼ì íë, ì¡°ê±´ì ë§ë ìì를 ë°ííë ëì í´ë¹ ììì ì¸ë±ì¤ë¥¼ ë°ííë¤ë ì ì´ ë¤ë¦
ëë¤. ì¡°ê±´ì ë§ë ììê° ìì¼ë©´ -1ì´ ë°íë©ëë¤.
filter
find ë©ìëë í¨ìì ë°í ê°ì trueë¡ ë§ëë ë¨ íëì ìì를 ì°¾ìµëë¤.
ì¡°ê±´ì 충족íë ììê° ì¬ë¬ ê°ë¼ë©´ arr.filter(fn)를 ì¬ì©íë©´ ë©ëë¤.
filterë findì 문ë²ì´ ì ì¬íì§ë§, ì¡°ê±´ì ë§ë ìì ì 체를 ë´ì ë°°ì´ì ë°ííë¤ë ì ìì ì°¨ì´ê° ììµëë¤.
let results = arr.filter(function(item, index, array) {
// ì¡°ê±´ì 충족íë ììë resultsì ìì°¨ì ì¼ë¡ ëí´ì§ëë¤.
// ì¡°ê±´ì 충족íë ììê° íëë ìì¼ë©´ ë¹ ë°°ì´ì´ ë°íë©ëë¤.
});
ìì:
let users = [
{id: 1, name: "John"},
{id: 2, name: "Pete"},
{id: 3, name: "Mary"}
];
// ì쪽 ì¬ì©ì ë ëª
ì ë°íí©ëë¤.
let someUsers = users.filter(item => item.id < 3);
alert(someUsers.length); // 2
ë°°ì´ì ë³ííë ë©ìë
ë°°ì´ì ë³íìí¤ê±°ë ìì를 ì¬ ì ë ¬í´ì£¼ë ë©ìëì ëí´ ììë´ ìë¤.
map
arr.mapì ì ì©ì±ê³¼ ì¬ì© ë¹ëê° ì주 ëì ë©ìë ì¤ íëì ëë¤.
mapì ë°°ì´ ìì ì 체를 ëìì¼ë¡ í¨ì를 í¸ì¶íê³ , í¨ì í¸ì¶ 결과를 ë°°ì´ë¡ ë°íí´ì¤ëë¤.
문ë²:
let result = arr.map(function(item, index, array) {
// ìì ëì ìë¡ì´ ê°ì ë°íí©ëë¤.
});
ìë ìììì ê° ìì(문ìì´)ì 길ì´ë¥¼ ì¶ë ¥í´ì¤ëë¤.
let lengths = ["Bilbo", "Gandalf", "Nazgul"].map(item => item.length);
alert(lengths); // 5,7,6
sort(fn)
arr.sort()ë ë°°ì´ì ìì를 ì ë ¬í´ì¤ëë¤. ë°°ì´ ìì²´ê° ë³ê²½ë©ëë¤.
ë©ìë를 í¸ì¶íë©´ ì¬ì ë ¬ ë ë°°ì´ì´ ë°íëëë°, ì´ë¯¸ arr ìì²´ê° ìì ëì기 ë문ì ë°í ê°ì ì ì¬ì©ëì§ ìë í¸ì
ëë¤.
ìì:
let arr = [ 1, 2, 15 ];
// arr ë´ë¶ê° ì¬ ì ë ¬ë©ëë¤.
arr.sort();
alert( arr ); // 1, 15, 2
ì! ëê° ì´ìíë¤ì.
ì¬ì ë ¬ í ë°°ì´ ììê° 1, 15, 2ê° ëììµëë¤. 기ëíë ê²°ê³¼(1, 2, 15)ìë ë¤ë¥´ë¤ì. ì ì´ë° ê²°ê³¼ê° ëììê¹ì?
ììë 문ìì´ë¡ ì·¨ê¸ëì´ ì¬ ì ë ¬ë기 ë문ì ëë¤.
모ë ììë 문ìíì¼ë¡ ë³íë ì´íì ì¬ ì ë ¬ë©ëë¤. ìì ë°°ì ë¯ì´ 문ìì´ ë¹êµë ì¬ì í¸ì§ ìì¼ë¡ ì§íë기 ë문ì 2ë 15ë³´ë¤ í° ê°ì¼ë¡ ì·¨ê¸ë©ëë¤("2" > "15").
기본 ì ë ¬ ê¸°ì¤ ëì ìë¡ì´ ì ë ¬ 기ì¤ì ë§ë¤ë ¤ë©´ arr.sort()ì ìë¡ì´ í¨ì를 ë겨ì¤ì¼ í©ëë¤.
ì¸ìë¡ ë겨주ë í¨ìë ë°ëì ê° ë ê°ë¥¼ ë¹êµí´ì¼ íê³ ë°í ê°ë ìì´ì¼ í©ëë¤.
function compare(a, b) {
if (a > b) return 1; // 첫 ë²ì§¸ ê°ì´ ë ë²ì§¸ ê°ë³´ë¤ í° ê²½ì°
if (a == b) return 0; // ë ê°ì´ ê°ì ê²½ì°
if (a < b) return -1; // 첫 ë²ì§¸ ê°ì´ ë ë²ì§¸ ê°ë³´ë¤ ìì ê²½ì°
}
ì´ì ë°°ì´ ìì를 ì«ì ì¤ë¦ì°¨ì 기ì¤ì¼ë¡ ì ë ¬í´ë´ ìë¤.
function compareNumeric(a, b) {
if (a > b) return 1;
if (a == b) return 0;
if (a < b) return -1;
}
let arr = [ 1, 2, 15 ];
arr.sort(compareNumeric);
alert(arr); // 1, 2, 15
ì´ì 기ëíë ëë¡ ììê° ì ë ¬ëììµëë¤.
ì¬ê¸°ì ì ì ë©ì¶° ì ìììì ì´ë¤ ì¼ì´ ì¼ì´ë¬ëì§ ìê°í´ ë´
ìë¤. ì¬ì¤ arrì ì«ì, 문ìì´, ê°ì²´ ë±ì´ ë¤ì´ê° ì ììµëë¤. ì ì ìë 무ì¸ê°ë¡ 구ì±ë ì§í©ì´ ëë ê±°ì£ . ì´ì ì´ ë¹ ëì§ì ì¸ ì§í©ì ì ë ¬í´ì¼ íë¤ê³ ê°ì í´ë´
ìë¤. 무ì¸ê°ë¥¼ ì ë ¬íë ¤ë©´ 기ì¤ì´ íìíê² ì£ ? ì´ë ì ë ¬ 기ì¤ì ì ìí´ì£¼ë í¨ì(ordering function, ì ë ¬ í¨ì) ê° íìí©ëë¤. sortì ì ë ¬ í¨ì를 ì¸ìë¡ ëê²¨ì£¼ì§ ìì¼ë©´ ì´ ë©ìëë ì¬ì í¸ì§ ìì¼ë¡ ìì를 ì ë ¬í©ëë¤.
arr.sort(fn)ë í¬ê´ì ì¸ ì ë ¬ ìê³ ë¦¬ì¦ì ì´ì©í´ 구íëì´ììµëë¤. ëê° ìµì íë íµ ìí¸(quicksort)를 ì¬ì©íëë°, arr.sort(fn)ë 주ì´ì§ í¨ì를 ì¬ì©í´ ì ë ¬ 기ì¤ì ë§ë¤ê³ ì´ ê¸°ì¤ì ë°ë¼ ììë¤ì ì¬ë°°ì´íë¯ë¡ ê°ë°ìë ë´ë¶ ì ë ¬ ëì ì리를 ì íìê° ììµëë¤. ì°ë¦¬ê° í´ì¼ í ì¼ì ì ë ¬ í¨ì fnì ë§ë¤ê³ ì´ë¥¼ ì¸ìë¡ ë겨주ë ê²ë¿ì
ëë¤.
ì ë ¬ ê³¼ì ìì ì´ë¤ ììë¼ë¦¬ ë¹êµê° ì¼ì´ë¬ëì§ íì¸íê³ ì¶ë¤ë©´ ìë ì½ë를 íì©íìë©´ ë©ëë¤.
[1, -2, 15, 2, 0, 8].sort(function(a, b) {
alert( a + " <> " + b );
return a - b;
});
ì ë ¬ ì¤ì í ììê° í¹ì ììì ì¬ë¬ ë² ë¹êµëë ì¼ì´ ì기곤 íëë° ë¹êµ íì를 ìµìí íë ¤ë¤ ë³´ë©´ ì´ë° ì¼ì´ ë°ìí ì ììµëë¤.
ì ë ¬ í¨ìì ë°í ê°ì ì ì½ì´ ììµëë¤. ìì를 ë°ííë ê²½ì° ì²« ë²ì§¸ ì¸ìê° ë ë²ì§¸ ì¸ìë³´ë¤ 'í¬ë¤â를 ëíë´ê³ , ìì를 ë°ííë ê²½ì° ì²« ë²ì§¸ ì¸ìê° ë ë²ì§¸ ì¸ìë³´ë¤ 'ìë¤â를 ëíë´ê¸°ë§ íë©´ ë©ëë¤.
ì´ ì ì ì´ì©íë©´ ì ë ¬ í¨ì를 ë ê°ê²°íê² ë§ë¤ ì ììµëë¤.
let arr = [ 1, 2, 15 ];
arr.sort(function(a, b) { return a - b; });
alert(arr); // 1, 2, 15
íì´í í¨ì를 ì¬ì©íë©´ ì ë ¬ í¨ì를 ë ê¹ëíê² ë§ë¤ ì ììµëë¤.
arr.sort( (a, b) => a - b );
íì´í í¨ì를 íì©í ì½ëì í¨ì ì ì¸ë¬¸ì ì¬ì©í ì½ëë ëì¼íê² ìëí©ëë¤.
localeCompare를 ì¬ì©íì¸ì.stringsìì ë°°ì´ ë¹êµ ìê³ ë¦¬ì¦ì´ 기ìµëìëì? ì´ ìê³ ë¦¬ì¦ì ì ëì½ë를 기ì¤ì¼ë¡ ê¸ì를 ë¹êµí©ëë¤.
Ãê°ì 문ìê° ìë ì¸ì´ìë ëìíë ¤ë©´ str.localeCompare ë©ìë를 ì¬ì©í´ 문ìì´ì ë¹êµíë ê² ì¢ìµëë¤.
ë ì¼ì´ë¡ ëíë¸ êµê°ê° ììì¸ ë°°ì´ì ì ë ¬í´ë´ ìë¤.
let countries = ['Ãsterreich', 'Andorra', 'Vietnam'];
alert( countries.sort( (a, b) => a > b ? 1 : -1) ); // Andorra, Vietnam, Ãsterreich (ì ëë¡ ì ë ¬ì´ ëì§ ìììµëë¤.)
alert( countries.sort( (a, b) => a.localeCompare(b) ) ); // Andorra,Ãsterreich,Vietnam (ì ëë¡ ì ë ¬ëìë¤ì!)
reverse
arr.reverseë arrì ìì를 ììì¼ë¡ ì ë ¬ìì¼ì£¼ë ë©ìëì
ëë¤.
ìì:
let arr = [1, 2, 3, 4, 5];
arr.reverse();
alert( arr ); // 5,4,3,2,1
ë°í ê°ì ì¬ ì ë ¬ë ë°°ì´ì ëë¤.
splitê³¼ join
ë©ìì§ ì ì¡ ì í리ì¼ì´ì
ì ë§ë¤ê³ ìë¤ê³ ê°ì í´ ë´
ìë¤. ìì ìê° ì¬ë¬ ëª
ì¼ ê²½ì°, ë°ì ìë ì¼íë¡ ê° ìì ì를 구ë¶í ê²ëë¤. John, Pete, Maryê°ì´ ë§ì´ì£ . ê°ë°ìë 긴 문ìì´ ííì ìì ì 리ì¤í¸ë¥¼ ë°°ì´ ííë¡ ì íí´ ì²ë¦¬íê³ ì¶ì ê²ëë¤. ì
ë ¥ë°ì 문ìì´ì ì´ë»ê² ë°°ì´ë¡ ë°ê¿ ì ììê¹ì?
str.split(delim)ì ì´ì©íë©´ ì°ë¦¬ê° ìíë ê²ì ì íí í ì ììµëë¤. ì´ ë©ìëë 구ë¶ì(delimiter) delimì 기ì¤ì¼ë¡ 문ìì´ì 쪼ê°ì¤ëë¤.
ìë ìììì ì¼íì 공백ì í©ì¹ 문ìì´ì´ 구ë¶ìë¡ ì¬ì©ëê³ ììµëë¤.
let names = 'Bilbo, Gandalf, Nazgul';
let arr = names.split(', ');
for (let name of arr) {
alert( `${name}ìê² ë³´ë´ë ë©ìì§` ); // Bilboìê² ë³´ë´ë ë©ìì§
}
split ë©ìëë ë ë²ì§¸ ì¸ìë¡ ì«ì를 ë°ì ì ììµëë¤. ì´ ì«ìë ë°°ì´ì 길ì´ë¥¼ ì íí´ì£¼ë¯ë¡ 길ì´ë¥¼ ëì´ìë ìì를 무ìí ì ììµëë¤. ì¤ë¬´ìì ì주 ì¬ì©íë 기ë¥ì ìëëë¤.
let arr = 'Bilbo, Gandalf, Nazgul, Saruman'.split(', ', 2);
alert(arr); // Bilbo, Gandalf
split(s)ì s를 ë¹ ë¬¸ìì´ë¡ ì§ì íë©´ 문ìì´ì ê¸ì ë¨ìë¡ ë¶ë¦¬í ì ììµëë¤.
let str = "test";
alert( str.split('') ); // t,e,s,t
arr.join(glue)ì splitê³¼ ë°ë ìí ì íë ë©ìëì
ëë¤. ì¸ì glue를 ì ì°©ì ì²ë¼ ì¬ì©í´ ë°°ì´ ìì를 모ë í©ì¹ í íëì 문ìì´ì ë§ë¤ì´ì¤ëë¤.
ìì:
let arr = ['Bilbo', 'Gandalf', 'Nazgul'];
let str = arr.join(';'); // ë°°ì´ ìì 모ë를 ;를 ì¬ì©í´ íëì 문ìì´ë¡ í©ì¹©ëë¤.
alert( str ); // Bilbo;Gandalf;Nazgul
reduceì reduceRight
forEach, for, for..of를 ì¬ì©íë©´ ë°°ì´ ë´ ìì를 ëìì¼ë¡ ë°ë³µ ìì
ì í ì ììµëë¤.
ê° ìì를 ëë©´ì ë°ë³µ ìì
ì ìííê³ , ìì
결과물ì ìë¡ì´ ë°°ì´ ííë¡ ì»ì¼ë ¤ë©´ mapì ì¬ì©íë©´ ëì£ .
arr.reduceì arr.reduceRightë ì´ë° ë©ìëë¤ê³¼ ì ì¬í ìì
ì í´ì¤ëë¤. ê·¸ë°ë° ì¬ì©ë²ì´ ì¡°ê¸ ë³µì¡í©ëë¤. reduceì reduceRightë ë°°ì´ì 기ë°ì¼ë¡ ê° íë를 ëì¶í ë ì¬ì©ë©ëë¤.
문ë²:
let value = arr.reduce(function(accumulator, item, index, array) {
// ...
}, [initial]);
ì¸ìë¡ ë겨주ë í¨ìë ë°°ì´ì 모ë ìì를 ëìì¼ë¡ ì°¨ë¡ì°¨ë¡ ì ì©ëëë°, ì ì© ê²°ê³¼ë ë¤ì í¨ì í¸ì¶ ì ì¬ì©ë©ëë¤.
í¨ìì ì¸ìë ë¤ìê³¼ ê°ìµëë¤.
accumulatorâ ì´ì í¨ì í¸ì¶ì ê²°ê³¼.initialì í¨ì ìµì´ í¸ì¶ ì ì¬ì©ëë ì´ê¹ê°ì ëíë(ìµì )itemâ íì¬ ë°°ì´ ììindexâ ììì ìì¹arrayâ ë°°ì´
ì´ì í¨ì í¸ì¶ ê²°ê³¼ë ë¤ì í¨ì를 í¸ì¶í ë 첫 ë²ì§¸ ì¸ì(previousValue)ë¡ ì¬ì©ë©ëë¤.
첫 ë²ì§¸ ì¸ìë ìì í¸ì¶íë í¨ìë¤ì ê²°ê³¼ê° ëì ëì´ ì ì¥ëë 'ëì°ê¸°(accumulator)'ë¼ê³ ìê°íë©´ ë©ëë¤. ë§ì§ë§ í¨ìê¹ì§ í¸ì¶ëë©´ ì´ ê°ì reduceì ë°í ê°ì´ ë©ëë¤.
ë³µì¡í´ ë³´ì´ê¸´ íì§ë§ ìì 를 íµí´ ë©ìë를 ì´í´í´ ë´ ìë¤.
reduce를 ì´ì©í´ ì½ë í ì¤ë¡ ë°°ì´ì 모ë ìì를 ëí ê°ì 구í´ë³´ê² ìµëë¤.
let arr = [1, 2, 3, 4, 5];
let result = arr.reduce((sum, current) => sum + current, 0);
alert(result); // 15
reduceì ì ë¬í í¨ìë ì¤ì§ ì¸ì ë ê°ë§ ë°ê³ ììµëë¤. ëê° ì´ë ê² ì¸ì를 ë ê°ë§ ë°ìµëë¤.
ì´ì ì´ë¤ ê³¼ì ì ê±°ì³ ìì ê°ì ê²°ê³¼ê° ëìëì§ ìì¸í ì´í´ë³´ê² ìµëë¤.
- í¨ì ìµì´ í¸ì¶ ì,
reduceì ë§ì§ë§ ì¸ìì¸0(ì´ê¹ê°)ì´sumì í ë¹ë©ëë¤.currentì ë°°ì´ì 첫 ë²ì§¸ ììì¸1ì´ í ë¹ë©ëë¤. ë°ë¼ì í¨ìì ê²°ê³¼ë1ì´ ë©ëë¤. - ë ë²ì§¸ í¸ì¶ ì,
sum = 1ì´ê³ ì¬ê¸°ì ë°°ì´ì ë ë²ì§¸ ìì(2)ê° ëí´ì§ë¯ë¡ ê²°ê³¼ë3ì´ ë©ëë¤. - ì¸ ë²ì§¸ í¸ì¶ ì,
sum = 3ì´ê³ ì¬ê¸°ì ë°°ì´ì ë¤ì ììê° ëí´ì§ëë¤. ì´ë° ê³¼ì ì´ ê³ì ì´ì´ì§ëë¤.
ê³ì° íë¦:
í를 ì´ì©í´ ì¤ëª íë©´ ìëì ê°ìµëë¤. í¨ìê° í¸ì¶ë ëë§ë¤ ë겨ì§ë ì¸ìì ì°ì° ê²°ê³¼ë ê° ì´ìì íì¸í ì ììµëë¤.
sum |
current |
result | |
|---|---|---|---|
| 첫 ë²ì§¸ í¸ì¶ | 0 |
1 |
1 |
| ë ë²ì§¸ í¸ì¶ | 1 |
2 |
3 |
| ì¸ ë²ì§¸ í¸ì¶ | 3 |
3 |
6 |
| ë¤ ë²ì§¸ í¸ì¶ | 6 |
4 |
10 |
| ë¤ì¯ë²ì§¸ í¸ì¶ | 10 |
5 |
15 |
ì´ì ì´ì í¸ì¶ì ê²°ê³¼ê° ì´ë»ê² ë¤ì í¸ì¶ì 첫 ë²ì§¸ ì¸ìë¡ ì ë¬ëëì§ ìì ¨ì£ ?
íí¸, ìëì ê°ì´ ì´ê¹ê°ì ìëµíë ê²ë ê°ë¥í©ëë¤.
let arr = [1, 2, 3, 4, 5];
// reduceìì ì´ê¹ê°ì ì ê±°í¨(0ì´ ìì)
let result = arr.reduce((sum, current) => sum + current);
alert( result ); // 15
ì´ê¹ê°ì ìì ë ê²°ê³¼ë ëì¼íë¤ì. ì´ê¹ê°ì´ ìì¼ë©´ reduceë ë°°ì´ì 첫 ë²ì§¸ ìì를 ì´ê¹ê°ì¼ë¡ ì¬ì©íê³ ë ë²ì§¸ ììë¶í° í¨ì를 í¸ì¶í기 ë문ì
ëë¤.
ì íìì 첫 ë²ì§¸ í¸ì¶ì ê´ë ¨ë ì¤ë§ ìì ë©´ ì´ê¹ê° ìì´ ê³ì°í ì ìì ì ê³ì° íë¦ì´ ë©ëë¤.
íì§ë§ ì´ë ê² ì´ê¹ê° ìì´ reduce를 ì¬ì©í ë ê·¹ëì 주ì를 기ì¸ì¬ì¼ í©ëë¤. ë°°ì´ì´ ë¹ì´ìë ìíë©´ reduce í¸ì¶ ì ìë¬ê° ë°ìí기 ë문ì
ëë¤.
ìì:
let arr = [];
// TypeError: Reduce of empty array with no initial value
// ì´ê¹ê°ì ì¤ì í´ ì£¼ìë¤ë©´ ì´ê¹ê°ì´ ë°íëìì ê²ëë¤.
arr.reduce((sum, current) => sum + current);
ì´ë° ìì¸ìí© ë문ì íì ì´ê¹ê°ì ëª ìí´ ì¤ ê²ì ê¶ì¥í©ëë¤.
arr.reduceRightë reduceì ëì¼í 기ë¥ì íì§ë§ ë°°ì´ì ì¤ë¥¸ìª½ë¶í° ì°ì°ì ìííë¤ë ì ì´ ë¤ë¥¸ ë©ìëì
ëë¤.
Array.isArrayë¡ ë°°ì´ ì¬ë¶ ììë´ê¸°
ìë°ì¤í¬ë¦½í¸ìì ë°°ì´ì ë 립ë ìë£íì¼ë¡ ì·¨ê¸ëì§ ìê³ ê°ì²´íì ìí©ëë¤.
ë°ë¼ì typeofë¡ë ì¼ë° ê°ì²´ì ë°°ì´ì 구ë¶í ìê° ìì£ .
alert(typeof {}); // object
alert(typeof []); // object
ê·¸ë°ë° ë°°ì´ì ì주 ì¬ì©ëë ìë£êµ¬ì¡°ì´ê¸° ë문ì ë°°ì´ì¸ì§ ìëì§ë¥¼ ê°ë³í´ë´ë í¹ë³í ë©ìëê° ìë¤ë©´ ì주 ì ì©í ê²ëë¤. Array.isArray(value)ë ì´ë´ ë ì¬ì©í ì ìë ì ì©í ë©ìëì
ëë¤. valueê° ë°°ì´ì´ë¼ë©´ true를, ë°°ì´ì´ ìëë¼ë©´ false를 ë°íí´ì£¼ì£ .
alert(Array.isArray({})); // false
alert(Array.isArray([])); // true
ë°°ì´ ë©ìëì âthisArgâ
í¨ì를 í¸ì¶íë ëë¶ë¶ì ë°°ì´ ë©ìë(find, filter, map ë±. sortë ì ì¸)ë thisArgë¼ë 매ê°ë³ì를 ìµì
ì¼ë¡ ë°ì ì ììµëë¤.
ì주 ì¬ì©ëë ì¸ìê° ìëì´ì ì§ê¸ê¹ì§ ì´ ë§¤ê°ë³ìì ëí´ ì¸ê¸íì§ ììëë°, íí 리ì¼ì ìì±ë를 ìí´ thisArgì ëí´ ì ì ì¸ê¸íê³ ëì´ê°ëë¡ íê² ìµëë¤.
thisArgë ìëì ê°ì´ íì©í ì ììµëë¤.
arr.find(func, thisArg);
arr.filter(func, thisArg);
arr.map(func, thisArg);
// ...
// thisArgë ì íì ì¼ë¡ ì¬ì©í ì ìë ë§ì§ë§ ì¸ìì
ëë¤.
thisArgë funcì thisê° ë©ëë¤.
ìë ìììì ê°ì²´ armyì ë©ìë를 filterì ì¸ìë¡ ëê²¨ì£¼ê³ ìëë°, ì´ë thisArgë canJoinì 컨í
ì¤í¸ ì 보를 ë겨ì¤ëë¤.
let army = {
minAge: 18,
maxAge: 27,
canJoin(user) {
return user.age >= this.minAge && user.age < this.maxAge;
}
};
let users = [
{age: 16},
{age: 20},
{age: 23},
{age: 30}
];
// army.canJoin í¸ì¶ ì ì°¸ì ë°íí´ì£¼ë user를 ì°¾ì
let soldiers = users.filter(army.canJoin, army);
alert(soldiers.length); // 2
alert(soldiers[0].age); // 20
alert(soldiers[1].age); // 23
thisArgsì army를 ì§ì íì§ ìê³ ë¨ìí users.filter(army.canJoin)를 ì¬ì©íë¤ë©´ army.canJoinì ë¨ë
í¨ìì²ë¼ ì·¨ê¸ëê³ , í¨ì 본문 ë´ thisë undefinedê° ëì´ ìë¬ê° ë°ìíì ê²ëë¤.
users.filter(user => army.canJoin(user))를 ì¬ì©íë©´ users.filter(army.canJoin, army)를 ëì²´í ì ì긴 íë° thisArg를 ì¬ì©íë ë°©ìì´ ì¢ ë ì´í´í기 ì¬ì°ë¯ë¡ ë ì주 ì¬ì©ë©ëë¤.
ìì½
ì§ê¸ê¹ì§ ì´í´ë³¸ ë°°ì´ ë©ìë를 ìì½í´ë³´ëë¡ í©ìë¤.
-
ìì를 ëíê±°ë ì§ì°ê¸°
push(...items)â 맨 ëì ìì ì¶ê°í기pop()â 맨 ë ìì ì¶ì¶í기shift()â 첫 ìì ì¶ì¶í기unshift(...items)â 맨 ìì ìì ì¶ê°í기splice(pos, deleteCount, ...items)âposë¶í°deleteCountê°ì ìì를 ì§ì°ê³ ,itemsì¶ê°í기slice(start, end)âstartë¶í°endë°ë¡ ìê¹ì§ì ìì를 ë³µì¬í´ ìë¡ì´ ë°°ì´ì ë§ë¦concat(...items)â ë°°ì´ì 모ë ìì를 ë³µì¬íê³items를 ì¶ê°í´ ìë¡ì´ ë°°ì´ì ë§ë í ì´ë¥¼ ë°íí¨.itemsê° ë°°ì´ì´ë©´ ì´ ë°°ì´ì ì¸ì를 기존 ë°°ì´ì ëí´ì¤
-
ìíë ìì 찾기
indexOf/lastIndexOf(item, pos)âposë¶í° ìíëitemì ì°¾ì. ì°¾ê² ëë©´ í´ë¹ ììì ì¸ë±ì¤ë¥¼, ìëë©´-1ì ë°íí¨includes(value)â ë°°ì´ìvalueê° ìì¼ë©´true를, ê·¸ë ì§ ìì¼ë©´false를 ë°íí¨find/filter(func)âfuncì ë°í ê°ìtrueë¡ ë§ëë 첫 ë²ì§¸/ì ì²´ ìì를 ë°íí¨findIndexëfindì ì ì¬í¨. ë¤ë§ ìì ëì ì¸ë±ì¤ë¥¼ ë°íí¨
-
ë°°ì´ ì ì²´ ìíí기
forEach(func)â 모ë ìììfuncì í¸ì¶í¨. ê²°ê³¼ë ë°íëì§ ìì
-
ë°°ì´ ë³íí기
map(func)â 모ë ìììfuncì í¸ì¶íê³ , ë°íë 결과를 ê°ì§ê³ ìë¡ì´ ë°°ì´ì ë§ë¦sort(func)â ë°°ì´ì ì ë ¬íê³ ì ë ¬ë ë°°ì´ì ë°íí¨reverse()â ë°°ì´ì ë¤ì§ì´ ë°íí¨split/joinâ 문ìì´ì ë°°ì´ë¡, ë°°ì´ì 문ìì´ë¡ ë³íí¨reduce(func, initial)â ìì를 ì°¨ë¡ë¡ ëë©´ìfuncì í¸ì¶í¨. ë°íê°ì ë¤ì í¨ì í¸ì¶ì ì ë¬í¨. ìµì¢ ì ì¼ë¡ íëì ê°ì´ ëì¶ë¨
-
기í
Array.isArray(arr)âarrì´ ë°°ì´ì¸ì§ ì¬ë¶ë¥¼ íë¨í¨
sort, reverse, spliceë 기존 ë°°ì´ì ë³íìí¨ë¤ë ì ì 주ìíì기 ë°ëëë¤.
ì§ê¸ê¹ì§ ë°°ì´ ë©ìëë§ì¼ë¡ ë°°ì´ê³¼ ê´ë ¨ë ìì 99%를 í´ê²°í ì ììµëë¤. ì´ ì¸ì ë°°ì´ ë©ìëë ì긴 íë° ì ì ì¸ê¸íê³ ëì´ê°ê² ìµëë¤.
-
arr.some(fn)ê³¼ arr.every(fn)ë ë°°ì´ì íì¸í©ëë¤.
ë ë©ìëë
mapê³¼ ì ì¬íê² ëª¨ë ìì를 ëìì¼ë¡ í¨ì를 í¸ì¶í©ëë¤.someì í¨ìì ë°í ê°ìtrueë¡ ë§ëë ììê° íëë¼ë ìëì§ ì¬ë¶ë¥¼ íì¸íê³everyë 모ë ììê° í¨ìì ë°í ê°ìtrueë¡ ë§ëëì§ ì¬ë¶ë¥¼ íì¸í©ëë¤. ë ë©ìë 모ë ì¡°ê±´ì 충족íë©´true를, ê·¸ë ì§ ìì¼ë©´false를 ë°íí©ëë¤. -
arr.fill(value, start, end)ì
startë¶í°endê¹ì§value를 ì±ì ë£ìµëë¤. -
arr.copyWithin(target, start, end)ì
startë¶í°endê¹ì§ ìì를 ë³µì¬íê³ , ë³µì¬í ìì를targetì ë¶ì¬ë£ìµëë¤. 기존 ììê° ìë¤ë©´ ë®ì´ìëë¤.
ë°°ì´ì ê´í 모ë ë©ìëë manualìì ì°¾ìë³¼ ì ììµëë¤.
ë°°ìì¼ í ë©ìë ì¢ ë¥ê° ë무 ë§ìì ì´ê±¸ ë¤ ì¸ìì¼ íëë¼ë ìê°ì´ ë¤ ì ìëë°, ìê°ë³´ë¤ ì¬ì°ë ë무 ê±±ì íì§ ìì¼ì ¨ì¼ë©´ ì¢ê² ìµëë¤.
ì¼ë¨ì ìì½ë³¸ì ì°¸ê³ í´ ì주 ì¬ì©íë ë©ìëê° ë¬´ìì¸ì§ ì ëë§ ììëì´ë ê´ì°®ìµëë¤. ìë ê³¼ì 를 íë©´ì ì¶©ë¶í ì°ìµíë¤ ë³´ë©´ ë°°ì´ ë©ìëì ëí ê²½íì¹ê° ìì¼ ê²ëë¤.
ëì¤ì ë°°ì´ì ì´ì©í´ ëê°ë¥¼ í´ì¼ íëë° ë°©ë²ì´ ë ì¤ë¥´ì§ ìì ë ì´ê³³ì¼ë¡ ëìì ìì½ë³¸ì ë¤ì ë³´ê³ ìí©ì ë§ë ë©ìë를 ì°¾ì¼ë©´ ë©ëë¤. ì¤ëª ì ë¸ë¦° ììë¤ì´ ì¤ì ì½ë ìì± ì ëìì´ ë ê²ëë¤. ì´ë° ê³¼ì ì ë°ë³µíë¤ ë³´ë©´ í¹ë³í ë ¸ë ¥ ìì´ë ë©ìë를 ì ì ë¡ ì¸ì¸ ì ììµëë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.