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));

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM