js实现数组浅拷贝和深拷贝
一、浅拷贝的实现方式
方法一:通用循环
function shallowCopy(obj) { if (typeof obj !== 'object') return; const newObj = obj instanceof Array ? [] : {}; for(let key in obj) { if (obj.hasOwnProperty(key)) { newObj[key] = obj[key]; } } return newObj; }
以下方法,如果是单层数据,则可实现深拷贝的效果,如果是复杂多层数据,则为浅拷贝。
方法二:Object.assign
const newObj = Object.assign({}, oldObj);
方法三:Array.slice
const newArray = oldArray.slice();
方法四:Array.concat
方法四:Array.concat
方法五:es6
const { ...newObj } = oldObj;
const [ ...newArray ] = oldArray;
二、深拷贝的实现方式
方法一:通用循环(递归)
function deepCopy(obj) { if (typeof obj !== 'object') return; const newObj = obj instanceof Array ? [] : {}; for(let key in obj) { if (obj.hasOwnProperty(key)) { newObj[key] = typeof obj === 'object' ? deepCopy(obj[key]) : obj[key]; } } return newObj; }
方法二:JSON.stringify,JSON.parse(不能拷贝函数)
const newObj = JSON.parse(JSON.stringify(oldObj));