js深度clone的代码实例
程序员文章站
2022-05-18 17:28:57
js深度clone的代码实例
var app = app || {};
(function(){
/**
* 判断是否是数组
* @param val...
js深度clone的代码实例
var app = app || {}; (function(){ /** * 判断是否是数组 * @param val * @returns {boolean} */ var tostring = object.prototype.tostring; app.isarray = function(val){ return ('isarray' in array) ? array.isarray(val) : tostring.call(val) === '[object array]'; }; /** * 判断是否是对象 * ie6 使用tostring判断是object * @param val * @returns {boolean} */ app.isobject = function(val){ return tostring.call(null) === '[object object]' ? val !== null && val !== undefined && tostring.call(val) === '[object object]' && val.ownerdocument === undefined//排除dom : tostring.call(val) === '[object object]'; }; /** * copy 解除引用 * @param val * @returns {*} */ app.clone = function(val){ return json.parse(json.stringify(val)); }; app.cloneallobject = function(val){ var k, obj; for(k in val){ var item = val[k]; if(app.isarray(item)){//判断数组 obj[k] = app.cloneallarray(item); }else if(app.isobject(item)){ obj[k] = app.cloneallitems(item); }else{ obj[k] = item; } } return item; }; app.cloneallarray = function(val){ /** * 解除数组关系的引用 * @type {array.<t>} */ var arr = array.prototype.slice.call(val), newarr = [], i, len = arr.length; for(i=0;i<len;i++){ var item = arr[i]; if(app.isarray(item)){ newarr.push(app.cloneallarray(item)); }else if(app.isobject(item)){ newarr.push(app.cloneallobject(item)); }else{ newarr.push(val); } } return newarr; }; app.cloneallitems = function(val){ //解除引用 val = app.clone(val); if(app.isarray(val)){ app.cloneallarray(); }else if(app.isarray(val)){ app.cloneallobject(val); } return val; }; }());
下一篇: Java获取系统时间的四种方法