1. 程式人生 > 實用技巧 >js實現陣列淺拷貝和深拷貝

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