js 對象深拷貝函數

// 深拷貝函數封裝
    function deepCopy(obj) {
      // 根據obj的類型判斷是新建一個數組仍是對象
      let newObj = Array.isArray(obj)? [] : {};
      // 判斷傳入的obj存在,且類型爲對象
      if (obj && typeof obj === 'object') {
        for(key in obj) {
          // 若是obj的子元素是對象,則進行遞歸操做
          if(obj[key] && typeof obj[key] ==='object') {
            newObj[key] = deepCopy(obj[key])
          } else {
          // // 若是obj的子元素不是對象,則直接賦值
            newObj[key] = obj[key]
          }
        }
      }
      return newObj // 返回新對象
    }

    // 對象的深拷貝
    let obj1 = {
      a: '1',
      b: '2',
      c: {
        name: 'Demi'
      }
    }
    let obj2 = deepCopy(obj1) //將obj1的數據拷貝到obj2
    obj2.c.name = 'wilsunson'
    console.log(obj1) // {a: "1", b: "2", c: {name: 'wss'}}
    console.log(obj2) // {a: "1", b: "2", c: {name: 'wilsunson'}}
相關文章
相關標籤/搜索