์์ฃผ ํท๊ฐ๋ ค์ ์ฐธ์กฐํ์ ์๋ฌป๋ฐ JSON.parse()์ JSON.stringify()๋ฅผ ์ด์ฉํ์ฌ ๊น์ ๋ณต์ฌ๋ฅผ ํด์๋๋ฐ
์ด ๋ฐฉ๋ฒ์ ๋ฌธ์ ๊ฐ ๋ฐ์ ํ ์ฌ์ง๊ฐ ์๋ค๊ณ ํ๋ค. ์๋์ ๊ฐ์ด ์ด์ผ๊ธฐํ๊ฒ ๋ค.
๊ฐ์ฒด๋ ์ฐธ์กฐํ์ด๋ผ ๋ณต์ฌ ์, '='๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ์ด ๋ณต์ฌ๋์ง ์์ผ๋ฉฐ, ๋จ์ง ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ฐ์ ๋ณต์ฌํ์ฌ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๊ฒ ๋๋ค.
์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๊ฑด๋ค ์ ์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ฃผ์ํ์ฌ์ผ ํ๋ค.
โ ์์ ๋ณต์ฌ(Shallow Copy)
1. Object.assign(target, ...sources)
๊ฐ์ฒด ์์ฒด๋ ๊น์ ๋ณต์ฌ๊ฐ ๊ฐ๋ฅํ๋ค. ๋จ, ๊ฐ์ฒด๊ฐ 2์ฐจ์ ์ด์์ด๋ผ๋ฉด ์์ ๋ณต์ฌ๊ฐ ๋๋ค.
let obj = {
a: 1,
b: { c: 2 }
};
let copyObj = Object.assign({}, obj);
console.log(obj === copyObj) //false
console.log(obj.b.c === copyObj.b.c) //true
2. ... (Spread Operator)
์ ๊ฐ ๊ตฌ๋ฌธ ๋ํ, ๊ฐ์ฒด ์์ฒด๋ ๊น์ ๋ณต์ฌ๊ฐ ๊ฐ๋ฅํ๋ ๋ด๋ถ ๊ฐ์ฒด๋ ์์ ๋ณต์ฌ๊ฐ ๋๋ค.
let obj = {
a: 1,
b: { c: 2 }
};
let copyObj = { ...obj}
console.log(obj === copyObj) //false
console.log(obj.b.c === copyObj.b.c) //true
โ ๊น์ ๋ณต์ฌ(Deep Copy)
์ฌ๊ท ํจ์๋ฅผ ๋ง๋ค ์๋ ์์ผ๋ ๋ณดํต์ lodash ์คํ ์์ค๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค.
1. _.cloneDeep(value)
const obj = [{ 'a': 1 }, { 'b': 2 }];
const copyObj = _.cloneDeep(obj);
console.log(copyObj[0] === obj[0]); //false
์ฐธ๊ณ
_.clone(value) ์ ๊น์ ๋ณต์ฌ X
const obj = [{ 'a': 1 }, { 'b': 2 }];
const copyObj = _.clone(obj);
console.log(copyObj[0] === obj[0]); //true
2. JSON.parse(JSON.stringify(value));
๋ณดํต์ ์ ์์ ์ผ๋ก ๊น์ ๋ณต์ฌ๊ฐ ๋๋ค.
const obj = {
a: 1,
b: { c: 2 }
};
const copyObj = JSON.parse(JSON.stringify(obj));
console.log(obj.b.c === copyObj.b.c) //false
ํ์ง๋ง, ์์ธ์ฌํญ์ด ํ๋ ์์ผ๋ฏ๋ก ๋ฌดํฑ๋๊ณ ์ฌ์ฉํด์๋ ์๋๋ค.
๊ฐ์ฒด์ ํจ์๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ๋, ์ฆ value ๊ฐ์ด ํจ์์ธ ๊ฒฝ์ฐ๋ ๋ณต์ฌ๋ฅผ ์๋ตํ๋ค.
const obj = {
a: 1,
b: { c: 2 },
c : function() {
console.log('function์
๋๋ค.');
}
};
const copyObj = JSON.parse(JSON.stringify(obj));
console.log(obj.b.c === copyObj.b.c) //true
๊ทธ๋ฌ๋ฏ๋ก ์์ง๊น์ง๋ lodash์์ ์ ๊ณตํ๋ cloneDeep์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์์ ํด๋ณด์ธ๋ค.
https://lodash.com/docs/4.17.15#clone
Lodash Documentation
_(value) source Creates a lodash object which wraps value to enable implicit method chain sequences. Methods that operate on and return arrays, collections, and functions can be chained together. Methods that retrieve a single value or may return a primiti
lodash.com
'๐ Language > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript] Set (0) | 2023.03.06 |
---|---|
[javascript] ๋ฐฐ์ด ์ ๊ฐ์ฒด ์์์ ๋ฌธ์์ด ์กฐํฉ (0) | 2023.02.20 |
[javascript] ๋ฐฐ์ด ์ ๊ฐ์ฒด๋ค์ ๊ฐ ์์ ๋ํ๊ธฐ (0) | 2023.02.02 |
[javascript] <input> ํ๊ทธ์ ์ซ์๋ง ์ ๋ ฅ (์ ๊ท์ ์ฌ์ฉ) (0) | 2023.01.27 |
[Javascript] ES5, 6 ์ฐจ์ด (0) | 2022.05.23 |