Skip to content

Latest commit

 

History

History
75 lines (64 loc) · 1.51 KB

实现对象属性下划线转小驼峰.md

File metadata and controls

75 lines (64 loc) · 1.51 KB

实现代码格式化-下划线转驼峰

这是一次面试中遇到的题目,考察了深拷贝 + 数组/字符串的基础操作。特此记录下来,用于后续复习。

输入结果如下:

{
  name: "John",
  his_age: 12,
  his_info: {
    more_detail: {
      more_and_more_detail: {
        his_height: 23,
      },
      t_test: 222,
    },
  },
}

要求输出结果如下:

{
  name: "John",
  hisAge: 12,
  hisInfo: {
    moreDetail: {
      moreAndMoreDetail: {
        hisHeight: 23,
      },
      tTest: 222,
    },
  },
}

下划线转小驼峰,实现代码如下:

function underscoreToCamel(str) {
  const list = str.split("_");

  // 当有且只有一个子符串组成时,不格式化 
  if (list.length === 1) {
    return str;
  }
  
  return list.reduce((pre, cur) => {
    if (pre === '') {
      return pre + cur;
    }
    return pre + cur.charAt(0).toUpperCase() + cur.substr(1);
  }, '');
}

function recursive(obj) {
  const newObj = {};
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      const newKey = underscoreToCamel(key);
      newObj[newKey] = typeof obj[key] === 'object' ? recursive(obj[key]) : obj[key]; // 如果当前值是对象类型,则继续递归处理
    }
  }
  return newObj;
}

console.log(JSON.stringify(recursive(obj)))

这里简单扩展一下,小驼峰转下划线的方式:

var input = 'someTextHere';
var o1 = input.split(/(?=[A-Z])/).join('_').toLowerCase(); // split()的参数也可以是一个正则表达式