29 lines
		
	
	
		
			605 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			29 lines
		
	
	
		
			605 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | export function klona(val) { | ||
|  | 	var k, out, tmp; | ||
|  | 
 | ||
|  | 	if (Array.isArray(val)) { | ||
|  | 		out = Array(k=val.length); | ||
|  | 		while (k--) out[k] = (tmp=val[k]) && typeof tmp === 'object' ? klona(tmp) : tmp; | ||
|  | 		return out; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	if (Object.prototype.toString.call(val) === '[object Object]') { | ||
|  | 		out = {}; // null
 | ||
|  | 		for (k in val) { | ||
|  | 			if (k === '__proto__') { | ||
|  | 				Object.defineProperty(out, k, { | ||
|  | 					value: klona(val[k]), | ||
|  | 					configurable: true, | ||
|  | 					enumerable: true, | ||
|  | 					writable: true, | ||
|  | 				}); | ||
|  | 			} else { | ||
|  | 				out[k] = (tmp=val[k]) && typeof tmp === 'object' ? klona(tmp) : tmp; | ||
|  | 			} | ||
|  | 		} | ||
|  | 		return out; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	return val; | ||
|  | } |