Javascript實現對象的深度合並


function extend() {
var extended = {};
var deep = false;
var i = 0;

// 判斷是否為深拷貝
if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {
deep = arguments[0];
i++;//如果為深拷貝則初始的i為1或者為0
}

// 將對象屬性合並到已存在的對象中
var merge = function(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
// 如果屬性為對象並且需要深拷貝時則使用函數遞歸、反之則將當前的屬性替換現有的屬性
if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {
  extended[prop] = extend(extended[prop], obj[prop]);
} else {
  extended[prop] = obj[prop];
}
  }
  }
};

// 遍歷所有對象屬性
for (; i < arguments.length; i++) {
  merge(arguments[i]);
}

return extended;

}
 
示例:
  1、extend({a:1,b:2,c:3},{a:2,d:5})簡單拷貝
  2、extend(true,{a:1,b:2,c:3},{a:2,d:5,b:{a:123}})簡單拷貝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM