You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					62 lines
				
				1.4 KiB
			
		
		
			
		
	
	
					62 lines
				
				1.4 KiB
			| 
											3 years ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | module.exports = function (obj) { | ||
|  | 	if (typeof obj === 'string') { return camelCase(obj); } | ||
|  | 	return walk(obj); | ||
|  | }; | ||
|  | 
 | ||
|  | function walk(obj) { | ||
|  | 	if (!obj || typeof obj !== 'object') { return obj; } | ||
|  | 	if (isDate(obj) || isRegex(obj)) { return obj; } | ||
|  | 	if (isArray(obj)) { return map(obj, walk); } | ||
|  | 	return reduce(objectKeys(obj), function (acc, key) { | ||
|  | 		var camel = camelCase(key); | ||
|  | 		acc[camel] = walk(obj[key]); | ||
|  | 		return acc; | ||
|  | 	}, {}); | ||
|  | } | ||
|  | 
 | ||
|  | function camelCase(str) { | ||
|  | 	return str.replace(/[_.-](\w|$)/g, function (_, x) { | ||
|  | 		return x.toUpperCase(); | ||
|  | 	}); | ||
|  | } | ||
|  | 
 | ||
|  | var isArray = Array.isArray || function (obj) { | ||
|  | 	return Object.prototype.toString.call(obj) === '[object Array]'; | ||
|  | }; | ||
|  | 
 | ||
|  | var isDate = function (obj) { | ||
|  | 	return Object.prototype.toString.call(obj) === '[object Date]'; | ||
|  | }; | ||
|  | 
 | ||
|  | var isRegex = function (obj) { | ||
|  | 	return Object.prototype.toString.call(obj) === '[object RegExp]'; | ||
|  | }; | ||
|  | 
 | ||
|  | var has = Object.prototype.hasOwnProperty; | ||
|  | var objectKeys = Object.keys || function (obj) { | ||
|  | 	var keys = []; | ||
|  | 	for (var key in obj) { | ||
|  | 		if (has.call(obj, key)) { keys.push(key); } | ||
|  | 	} | ||
|  | 	return keys; | ||
|  | }; | ||
|  | 
 | ||
|  | function map(xs, f) { | ||
|  | 	if (xs.map) { return xs.map(f); } | ||
|  | 	var res = []; | ||
|  | 	for (var i = 0; i < xs.length; i++) { | ||
|  | 		res.push(f(xs[i], i)); | ||
|  | 	} | ||
|  | 	return res; | ||
|  | } | ||
|  | 
 | ||
|  | function reduce(xs, f, acc) { | ||
|  | 	if (xs.reduce) { return xs.reduce(f, acc); } | ||
|  | 	for (var i = 0; i < xs.length; i++) { | ||
|  | 		acc = f(acc, xs[i], i); | ||
|  | 	} | ||
|  | 	return acc; | ||
|  | } |