์ค๋์ ๋ฆฌ์กํธ๋ฅผ ๊ณต๋ถํ๋ค๊ฐ ๋ฏธ๋ค๋์๋ ๊ถ๊ธ์ฆ์ ํ์ด๋ณด์๋ค.
๐๋ฆฌ์กํธ๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ์ ๐์ 6์ฅ์์ ๋ด์ฅํจ์์ ๋ํ ์ธ๊ธ์ด ์์๋๋ฐ, ๊ฑฐ๊ธฐ์ concat, filter์ ๊ฐ์ ํจ์๊ฐ ์์๋ค.
๊ทธ๋ฐ๋ฐ concat ํจ์๋ฅผ ์ฐพ์๋ณด๋ค๋ณด๋ pushํจ์์ ๋น๊ต๊ฐ ๋ง์ด ๋๊ธธ๋ ๊ฐ์ด ๊ณต๋ถํด๋ณด์๋ค.
์ด ๋ ํจ์๋ค์ ๋ฐฐ์ด์ ์์๋ฅผ ์ถ๊ฐํ ๋ ์ฌ์ฉ๋๋ค. ๊ทธ๋ผ ๊ทธ ์ฌ์ด์์ ๋ ํจ์์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น?
๋จผ์ , push ํจ์๋ฅผ ์์๋ณด๊ณ , concatํจ์์ ๋ํด์ ์์๋ณด๊ฒ ๋ค.
์ ๋ ํจ์๋ฅผ ๊ฐ์ด ๋น๊ตํ๋๊ฒ์ธ๊ฐ?
๊ทธ ์ด์ ๋ ๋ ๊ฐ์ ๋ฐฐ์ด์ ํ๋์ ๋ฐฐ์ด๋ก ํฉ์น ๋, ์ผ์ด๋๋๋ฐ ํ๋์ ์์๋ฅผ ๋ฐ์ด๋ฃ๋ push ๋์ ์ concat์ ์ฌ์ฉํ๋ผ๊ณ ๋ ํจ์๋ฅผ ๊ฐ์ด ๋น๊ตํ๋ ๊ฒ์ด๋ค.
์ด ๊ธ์ MDN์ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์๋ค.
push()
push๋ ๊ธฐ์กด ๋ฐฐ์ด์ ์์๋ฅผ ์ถ๊ฐํ๋ฉฐ ๋ฐฐ์ด์ ์ด ๊ธธ์ด๋ฅผ ๋ฆฌํดํ๋ ๋ฉ์๋์ด๋ค.
์ด ๋ฉ์๋๋ arr.push([element1[, ...[, elementN]]]) ์ด ํ์์ฒ๋ผ ์์ฑํด์ฃผ๋ฉด๋๋ค.
push๋ฉ์๋๋ ์๋ ์ฝ๋์ ๊ฐ์ด ์๋๋๋ค.
const animals = ['pigs', 'goats', 'sheep'];
const count = animals.push('cows');
console.log(count);
// expected output: 4
//๋ณ์ count๋ push๋ฉ์๋๋ฅผ ํตํด์ cows์์๊ฐ ์ถ๊ฐ๋ ๋ฐฐ์ด animals์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
console.log(animals);
// expected output: Array ["pigs", "goats", "sheep", "cows"]
animals.push('chickens', 'cats', 'dogs');
console.log(animals);
// expected output: Array ["pigs", "goats", "sheep", "cows", "chickens", "cats", "dogs"]
push()๋ฉ์๋๋ ์๋์ ๊ฐ์ ์ธ๊ฐ์ง ๊ฒฝ์ฐ์ ์ฌ์ฉ์ด ๋๋ค.
- ๋ฐฐ์ด์ ์์๋ฅผ ์ถ๊ฐํ ๋
- ๋๊ฐ์ ๋ฐฐ์ด์ ๋ณํฉํ ๋
- ๋ฐฐ์ด์ฒ๋ผ ์๊ธด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋ ( Using an object in an array-like fashion) - ์ ์ฌ๋ฐฐ์ด
1,2๋ฒ์ ์์์ฝ๋๋ ์์ ๋ํ๋์๋ค. ๊ทธ๋ฌ๋ฉด, ์ธ๋ฒ์งธ ์ด์ ๋ ๋ฌด์์ผ๊น?
Array.prototype.push๊ฐ ๊ฐ์ฒด์์๋ ์ฌ์ฉ๋๋ค๋ ๊ฒ์ด๋ค.
์์์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์ดํดํด๋ณด์
let obj = {
length: 0,
addElem: function addElem(elem) {
// obj.length is automatically incremented
// every time an element is added.
[].push.call(this, elem)
}
}
// Let's add some empty objects just to illustrate.
obj.addElem({})
obj.addElem({})
console.log(obj.length)
// → 2
obj๊ฐ ๋ฐฐ์ด์ด ์๋์๋ ๋ถ๊ตฌํ๊ณ , push()๋ฉ์๋๊ฐ ์ ์ฉ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ฐ์ฒด์ ๋ฐฐ์ด์ ์ฌ์ฉํ์ง ์๋๋ค.
ํ์ง๋ง, ๊ฐ์ฒด์์ call๊ณผ Array.prototype.push๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ฉ์๋๊ฐ ๋ฐฐ์ด๋ก ์ฐฉ๊ฐํ๊ณ ์คํ๋๋๋ก ํ๋ ๊ฒ์ด๋ค.
(์ ์ฌ๋ฐฐ์ด์ ๊ฒฝ์ฐ์ ์๋ ๋ฐฐ์ด์ ๋ฉ์๋์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ์ง๋ง, ๋ฐฐ์ด ํ๋กํ ํ์ ์์ forEach ๋ฉ์๋๋ฅผ ๋น๋ ค์ค๋ฉด ์ฌ์ฉ๊ฐ๋ฅํ๋ค. -> call, apply)
์ ์ฌ๋ฐฐ์ด๊ณผ ๋ฐฐ์ด์ ๊ตฌ๋ถํ๊ธฐ ์ํด์๋ Array.isArray๋ฉ์๋๋ก ํ์ธํด๋ณผ ์ ์๋ค.
๋๋ ์ด ๋ถ๋ถ์ ๊ณต๋ถํ๋ฉด์ ์ ์ฌ๋ฐฐ์ด์ด๋ผ๋ ๊ฒ์ ์ฒ์ ์๊ฒ ๋์๋๋ฐ, ์ ์ฌ๋ฐฐ์ด๊ณผ ๋ฐฐ์ด์ ์ฐจ์ด์ ์ ์ฌ๊ธฐ์ ๋ ์์ธํ๊ฒ ๋ณด๊ณ ์ ์ ์์๋ค.
์ฌ๊ธฐ์ ์ค์ํ๊ฒ ๊ธฐ์ตํด์ผ๋๋ ๊ฒ์ ํจ์์ ๋ฆฌํด๊ฐ์ด๋ค.
๋ค์ด๊ฐ๋ ๋ณ์ : ํด๋น ๋ฐฐ์ด์ ๋์๋ฆฌ์ ๋ฃ๊ณ ์ถ์ element
๋ฆฌํด๊ฐ : push()๋ฉ์๋๊ฐ ๋ถ๋ฆฐ ์ดํ์ ์๋ก์ด ๊ธธ์ด๊ฐ์ ๋ฆฌํด
concat()
concat()๋ฉ์๋๋ ๋ ๊ฐ ์ด์์ ๋ฐฐ์ด์ ๋ณํฉํ ๋ ์ฌ์ฉ๋๋ ๋ฉ์๋์ด๋ค.
์ด ๋ฉ์๋๋ ๊ธฐ์กด์ ๋ฐฐ์ด์ ๋ฐ๊พธ์ง ์๊ณ , ์๋ก์ด ๋ฐฐ์ด์ ๋ฆฌํดํด์ค๋ค.
๊ธฐ์กด ๋ฐฐ์ด์ ๋ณต์ฌํ ํ ์์๋ฅผ ์ถ๊ฐํ์ฌ ์ ๋ฐฐ์ด์ ๋ฆฌํด
concat()๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๋ ๋ฐฐ์ด์ ํฉ์น๋ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
const letters = ['a', 'b', 'c'];
const numbers = [1, 2, 3];
letters.concat(numbers);
// result in ['a', 'b', 'c', 1, 2, 3]
์ฌ๊ธฐ์ push()์์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น?
๋ฐ๋ก ๋ฌธ์์ด๋ก ์ถ๊ฐ๋๋์ง, ๋ฐฐ์ด ์์ฒด๋ก ์ถ๊ฐ ๋๋์ง๊ฐ ์ฐจ์ด์ ์ด๋ค.
์๋ ์ฝ๋๋ฅผ ํ ๋ฒ ํ์ธํด๋ณด์
const letters = ['a', 'b', 'c'];
const numbers = [1, 2, 3];
//concat์ ์ฌ์ฉํ ๋
letters.concat(numbers);
// result in ['a', 'b', 'c', 1, 2, 3]
//push๋ฅผ ์ฌ์ฉํ ๋
letters.push(numbers);
console.log(letters);
// result in ['a', 'b', 'c', [1, 2, 3]]
์์ ์์๋ฅผ ๋ณด๋ฉด ๋ฌด์จ ์ฐจ์ด๊ฐ ์๋์ง ํ ๋์ ํ์ธ์ด ๋์ฃ ?!?!?
์, ๊ทธ๋ฌ๋ฉด ๋ค์์ผ๋ก๋ ๋ฐฐ์ด์์ ์๋ ๋ฐฐ์ด์ด ์์ ๋์ธ ์ค์ฒฉ๊ตฌ์กฐ์๋ push๋ concat์ ํ์ ๋ ์ด๋ป๊ฒ ๋ฐ์์ด ๋ ์ง ๋ณด๊ฒ ๋ค.
๋ฐ์ ์์๋ฅผ ๋จผ์ ๋ด๋ณด์.
const num1 = [[1]];
const num2 = [2, [3]];
const numbers = num1.concat(num2);
console.log(numbers);
// results in [[1], 2, [3]]
// modify the first element of num1
num1[0].push(4);
console.log(numbers);
// results in [[1, 4], 2, [3]]
num1[0].push(4); ์ด ์ฝ๋๋ num1๋ฐฐ์ด์ 0๋ฒ์งธ ์์์ 4๋ฅผ ์ถ๊ฐํด์ฃผ๋ผ๋ ๋ช ๋ น์ด๋ค.
๋ฐ๋ผ์, ๊ฒฐ๊ณผ๋ก ์์๊ฐ 1๋ง ์์๋ ๋ฐฐ์ด์์ [1,4]๋ก ์ถ๋ ฅ์ด ๋๋๊ฒ์ ํ์ธํด์ค์ ์๋ค.
์ด๋ ๊ฒ ๋๊ฐ์ง ๋ฉ์๋๋ค์ ์ ๋ฆฌํ๋ค๋ณด๋, push()๋ ํ๋์ ์์๋ ์์ดํ ๋ค์ ํ๋์ฉ ํ๋์ฉ ์ถ๊ฐํด์ค์ผํ ๋ ์ฌ์ฉํ ๊ฒ์ด๊ณ , ๋ฐฐ์ด์์ฒด๋ฅผ ๋ค๋ฃฐ ๋์๋ concat()์ ์ฐ๋๊ฒ ๋ ํจ์จ์ ์ด๋ผ๊ณ ์๊ฐ๋์๋ค.
๊ทธ๋ฆฌ๊ณ , push()๊ฐ ๋ฆฌํดํด์ฃผ๋ ๊ฐ์ด ๋ฐฐ์ด์ ๊ธธ์ด๋ผ๋ ์ ์ ๊ธฐ์ตํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
๋ค๋ฅธ ๋ด์ฅํจ์๋ค๋ ๋ง์ด ๊ณต๋ถํ๊ณ ์จ๋ด์ ๋ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ํด์ผ๊ฒ ๋ค!๐คจ๐
'WEB > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ setTimeout, setInterval ๋ก ์๊ฐ ๋ณด์ฅํ๋ค๊ณ ํ ์ ์์ด? ์ด๋ป๊ฒ? (0) | 2024.01.16 |
---|---|
[JavaScript] map ํจ์ (0) | 2021.02.01 |
[JavaScript] filter() (0) | 2021.01.24 |