Open runzhq opened 6 years ago
浅拷贝:拷贝的是数组或者对象的引用 深拷贝:将原数组或者对象的值拷贝过来,是值而非引用 深拷贝中涉及的问题:拷贝深度 1、深拷贝数组(第一层) 遍历、slice()、concat() 但是,数组元素是对象或者数组时都会失效 2、深拷贝对象 遍历、Object.assign()、ES6扩展运算符 问题同上 3、深拷贝(所有层级,不含func\正则) 3.1 JSON.parse(JSON.stringify(old));
var array = [ { number: 1 }, { number: 2 }, { number: 3 } ]; var copyArray = JSON.parse(JSON.stringify(array)); copyArray[0] = 'change'; console.log(array); console.log(copyArray);
3.2递归
function deepCopy(obj) { if (typeof obj !== 'object'){ return; } var newObj = obj.constructor === Array ? []:{}; for(var i in obj){ newObj[i] = typeof newObj[i] === 'object'? deepCopy(obj[i]):obj[i]; } return newObj; }
4、immutable 在改变新的数组(对象)的时候,不改变原数组(对象)
const { Map } = require('immutable') const map1 = Map({ a: 1, b: 2, c: 3 }) const map2 = map1.set('b', 50) map1.get('b') // 2 map2.get('b') // 50
小小的总结下:JSON、递归、immutable
浅拷贝:拷贝的是数组或者对象的引用 深拷贝:将原数组或者对象的值拷贝过来,是值而非引用 深拷贝中涉及的问题:拷贝深度 1、深拷贝数组(第一层) 遍历、slice()、concat() 但是,数组元素是对象或者数组时都会失效 2、深拷贝对象 遍历、Object.assign()、ES6扩展运算符 问题同上 3、深拷贝(所有层级,不含func\正则)
3.1 JSON.parse(JSON.stringify(old));
3.2递归
4、immutable 在改变新的数组(对象)的时候,不改变原数组(对象)
小小的总结下:JSON、递归、immutable