js深拷貝的演進

最終形態(tài)

// 深拷貝
function deepCopy(data) {
  if(data === undefined || data === null) return data;
  let __copy;
  if(data instanceof Date) __copy = new Date(data);
  else __copy = new data.constructor();
  for(let key in data) {
    if(!data.hasOwnProperty(key)) continue;
    let item = data[key];
    if(item instanceof Object) {
      __copy[key] = deepCopy(item);
    } else {
      __copy[key] = item;
    }
  }
  return __copy;
}

// 深度合并
function deepAssign(origin, obj) {
  if(arguments.length > 2) {
    return deepAssign(deepAssign(arguments[0], arguments[1]), ...([].slice.call(arguments, 2)));
  }
  for(const key in obj) {
    if(!Object.prototype.hasOwnProperty.call(obj, key)) ;
    else {
      let item = obj[key],
          o = origin[key],
          isObj = item instanceof Object,
          isArr = item instanceof Array;
      if(!o || o.constructor !== item.constructor) {
        origin[key] = isArr ? [].concat(item) : isObj ? deepAssign({}, item) : item;
      } else {
        origin[key] = isArr ? o.concat(item) : isObj ? deepAssign(o, item) : item;
      }
    }
  }
  return origin;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • title: JS淺拷貝與深拷貝的學習記錄date: 2017年9月21日 23:26:14tags: jscat...
    是ADI呀閱讀 314評論 1 1
  • 這次的學習深拷貝參考了子匠大大的文章:《JavaScript中對象的深拷貝》 JSON.parse()&JSON....
    這名字真不對閱讀 3,306評論 0 0
  • 基本知識 Java在運行時的內存使用分兩塊:棧內存與堆內存。 只就變量而言,棧內存上分配一些基本類型的變量(如in...
    野夢M閱讀 660評論 0 1
  • 深拷貝JS中的任何對象都不是一件容易的事情,你將會遇到這樣的問題,從object的原型中,錯誤的選擇應該留在原型上...
    mervynyang閱讀 673評論 0 5
  • 在南宋末年的江湖里,李莫愁是一個異類,是一個突兀的存在。 在那個時代,她這樣年紀的女性在社會上都有歸屬,是某人的妻...
    西湘閱讀 8,867評論 47 60

友情鏈接更多精彩內容