区分 数组 还是 对象,我当时脑子肯定进水了...Array.isArray([])都没想起来, 用typeof还不如用instanceof:data instanceof Array,我想不起来的那种方式是:Object.prototype.toString.call([]) === '[object Array]', Object.prototype.toString.call({}) === '[object object]'
//其中 健壮性暂未想那么多,烦人的紧张...
// https://job.youzan.com/coding/room/8a80fb97-e52f-4730-a439-e58b690e853c?key=xKHD
// 将 下面的数据 健值 转换成 驼峰的格式,如:a_b --> aB
// 在将他的输出转换为 下划线的形式,如:aB --> a_b
// 除了实现功能外,尽量将2个函数的公共部分进行抽离 形成公共的函数,减少代码量
const testData = {
a_b: 1,
s__ss: 2,
a_f: [ 1,2,3, {
f_s: 43
}],
a_3: {
d_4: 44
}
}
// a_b => aB
/**
*
* @param {Array | Object} data
*/
function camelCaseToUnderscore(data) {
//错误判断
//key 转换
var keyChange = function(key){
let key_arr = key.split('');
key_arr.forEach((v, i) => {
if(v === '_' && key_arr[i+1]){
key_arr[i+1] = key_arr[i+1].toUpperCase();
}
});
let new_key = key_arr.filter(v => v !== '_').join('');
return new_key;
}
return commonFun(data, keyChange, camelCaseToUnderscore);
}
function commonFun(data, keyFun, cb){
let new_data = typeof data.splice !== 'function' ? {} : [];
for(let key in data){
let new_key = keyFun(key);
if(typeof data[key] !== 'object'){//简单类型
new_data[new_key] = data[key];
}else{//对象
new_data[new_key] = cb(data[key]);
}
}
return new_data;
}
function underscoreToCamecase(data) {
//公共的错误判断
//key 转换
var keyChange = function(key){
let key_arr = key.split(''), arr = [];
key_arr.forEach((v, i) => {
if(/[A-Z]/.test(v)){
arr.push('_');
}
arr.push(v.toLowerCase())
});
let new_key = arr.join('');
return new_key;
}
return commonFun(data, keyChange, underscoreToCamecase);
}
console.log(camelCaseToUnderscore(testData))
let testData2 = camelCaseToUnderscore(testData);
console.log(underscoreToCamecase(testData2));
网友评论