Fe-interview: [js] 第4天 写一个方法把下划线命名转成大驼峰命名

Created on 19 Apr 2019  ·  115Comments  ·  Source: haizlin/fe-interview

第4天 写一个方法把下划线命名转成大驼峰命名

js

Most helpful comment

 function changeStr(str){
   if(str.split('_').length==1)return;
   str.split('_').reduce((a,b)=>{
     return a+b.substr(0,1).toUpperCase() + b.substr(1)
   })
}

All 115 comments

function changeLine (str) {
if(typeof str !== 'string'){
alert('请确认要删除的对象为字符串!');
}else {
var newName = '';
var arr = str.split('_');
arr.map((v,i)=>{
if(i===0){return};
newName += ad.substr(0,1).toUpperCase() + ad.substr(1);
})
}
}

function changeLine(str){
if(typeof str!=='string'){
alert('Please确认要删除的对象为字符串!');
} else {
var newName ='';
var arr = str.split('_');
arr.map((v,i)=> {
if(i === 0){return};
newName + = ad.substr(0,1).toUpperCase()+ ad.substr(1);
})
}
}

function changeLine(str) {
if (typeof str !== 'string') {
alert('请确认要删除的对象为字符串!');
} else {
var newName = '';
var arr = str.split('_');
// console.log(arr)
arr.map((v, i) => {
if (i === 0) { return aa=v};
newName += aa+v.substr(0, 1).toUpperCase() + v.substr(1);
})
return newName
}
}

function toCamel(str) {
  return str.replace(/(\w)(_)(\w)/g, (match, $1, $2, $3) => `${$1}${$3.toUpperCase()}`)
}

console.log(toCamel('a_bc_def')) // aBcDef 

上面的方法对 a_c_def 会返回 aC_def,想要返回 ACDef 得:

function toCamel(str) {
  str = str.replace(/(\w)/, (match, $1) => `${$1.toUpperCase()}`)
  while(str.match(/\w_\w/)) {
    str = str.replace(/(\w)(_)(\w)/, (match, $1, $2, $3) => `${$1}${$3.toUpperCase()}`)
  }
  return str
}

console.log(toCamel('a_c_def')) // ACDef 
function toCamelCase(str) {
  if (typeof str !== 'string') {
    return str;
  }
  return str
    .split('_')
    .map(item => item.charAt(0).toUpperCase() + item.substr(1, item.length))
    .join('');
}
function toCamel(str) {
    str = str.replace(/_(\w)/g, (match, $1) => `${$1.toUpperCase()}`)
    return str.substr(0,1).toUpperCase() + str.substr(1);
}

console.log(toCamel('a_bc_def'))
function strToCamel(str){
    return str.replace(/(^|_)(\w)/g,(m,$1,$2)=>$2.toUpperCase());
}

let str = 'hello_word'

function capital(str) {
let s = str
if(typeof s !== 'string'){
alert('类型不对哦~')
}
let arrStr = s.split('_')
let newStr = ''

arrStr.forEach((v,i)=>{
    if(v == ''){
        arrStr.splice(i,1) // 筛选掉空 如:hello_
    }
    newStr = newStr + v.substr(0,1).toUpperCase() + v.substr(1)
})

return newStr

}

console.log(capital(str)) // HelloWord

function transoform(str) {
    var result = str.split('');
    result.forEach(function(e, i, a) {
        if (e === '_') { a[i + 1] = a[i + 1].toUpperCase(); }
    });
    return result.join('').replace(/\_*/g, '');
}
var result = transoform('if_you_are_my_world');
console.log(result); // ifYouAreMyWorld
 function changeStr(str){
   if(str.split('_').length==1)return;
   str.split('_').reduce((a,b)=>{
     return a+b.substr(0,1).toUpperCase() + b.substr(1)
   })
}

function capitalize(str) {
const camelizeRE = /_(w)/g
return str.replace(camelizeRE, (_, c) => c? c.toUpperCase():'')
}

var str= "aaa_bbb_ccc"
function traHump(str) {
    var reg = /^[_a-zA-Z]+$/;
    if (typeof str !== "string" || !reg.test(str)) return;
    var newArr = [];
    var arr = str.split("");
    arr.forEach((item, index) => {
        if (item !== "_") {
        newArr.push(item);
        } else {
                newArr.push(arr[index+1].toUpperCase());
        }
    })
    console.log(newArr.join(""));   
}
traHump(str);

// 此情况未考虑:___a____

function transoform(str) {
    var result = str.split('');
    result.forEach(function(e, i, a) {
        if (e === '_') { a[i + 1] = a[i + 1].toUpperCase(); }
    });
    return result.join('').replace(/\_*/g, '');
}
var result = transoform('if_you_are_my_world');
console.log(result); // ifYouAreMyWorld

有一个小问题,当str以 _ 结尾的时候,不存在 a[i+1]

function snakeToCamel(str: string) {
  const s = str
    .split('_')
    .filter(v => !!v)
    .map(v => v[0].toUpperCase() + v.substr(1))
    .join('');
  return s[0].toLowerCase() + s.substr(1);
}
const toCamel = str =>
  str
    .split("_")
    .filter(s => !!s)
    .map((s, index) => (index === 0 ? s : s[0].toUpperCase() + s.slice(1)))
    .join("");

console.log(toCamel("a_bc_d"));
console.log(toCamel("bc_d"));
console.log(toCamel("bc___________ed"));
console.log(toCamel("_______a_bc_d__"));

// 顺便写的驼峰转下划线
const toSnake = str => {
  const target = str[0].toLowerCase() + str.slice(1);
  let result = target;
  (target.match(/[A-Z]/g) || []).forEach(word => {
    result = result.replace(word, `_${word.toLowerCase()}`);
  });
  return result;
};

console.log(toSnake("aBcDeFg"));
console.log(toSnake("ABCDEFG"));

console.log(changeHump('aewq_a_rgt____eryry'))
function changeHump(str){
if(typeof str !== 'string'||str.split('_').length===1) return str;
return (str.split('_').filter(s => !!s).map(e=>(e.substr(0, 1).toUpperCase()+e.substr(1)))).join('');
}

    function func(str){
        return str.replace(/(_)([a-z])/g,function(rs){ 
             return arguments[2].toUpperCase()
             }
        )
    }

func("a_c_def")

献丑了,通过去掉下划线和空格的方式进行实现
var underline = "safaf_asd___cddaa_________ssa"
function underlines(und) {
let unds = und
let a = 0
let joint = ""
unds = unds.split("_")
for (let i = 0; i < unds.length; i++) {
if (unds[i] !== "") {
if (a === 0) {
joint += unds[i]
a++
} else if (a > 0) {
// charAt() 方法可返回指定位置的字符
// toUpperCase() 方法用于把字符串转换为大写
// slice(),返回一个新的数组,该方法可从已有的数组中返回选定的元素
joint += unds[i].charAt(0).toUpperCase() + unds[i].slice(1)
}
}
}
return joint
}
underlines(underline)

(str) => str.split('_').reduce((acc, cur) => acc + cur.slice(0,1).toUpperCase() + cur.slice(1))

var resstr = "";
"html___accc_ddddd".split('_').forEach(element => {
    if (element)
        resstr += element[0].toUpperCase() + element.substring(1, element.length);
})
console.log(resstr)
const changeStr = (str) => {
      if(typeof str != 'string') return 'go away'
      let _str = str.replace(/__+/g, '_') // '_what_the_f**k_'
      if (_str.startsWith('_')) _str = _str.substr(1, _str.length) // 'what_the_f**k_'
      if (_str.endsWith('_')) _str = _str.substr(0, _str.length - 1) // 'what_the_f**k'
      return _str.split('_').reduce((acc, x) => acc + x[0].toUpperCase() + x.substr(1))
    }
    changeStr('_what______the_f**k__')

function lineChangeUpper(str) {
if (typeof str !== "string") {
throw new Error("非字符串");
} else {
let test_arr = str.split("_");
if (str.indexOf("_") > 0) {
for (let key in test_arr) {
if (key > 0) {
test_arr[key] =
test_arr[key][0].toUpperCase() +
test_arr[key].substr(1);
}
}
return test_arr.join("");
} else {
throw new Error("没有下划线");
}
}
}

let str = "up_set_to";
console.log(lineChangeUpper(str));

不太明白那些写那么复杂的有啥用???笔试题会让你写这么复杂的,越短小易懂越好;
哈哈,开个玩笑,你们写的好秀,面试官会眼前一亮,牛逼

const underlineToBigHump = str =>
  typeof str === 'string'
    ? str
        .split('_')
        .map(item => item.toLocaleLowerCase())
        .reduce(
          (pre, item) =>
            item ? `${pre}${item[0].toLocaleUpperCase()}${item.slice(1)}` : pre,
          ''
        )
    : str

function uChangeH(str){ let arr = str.split("_") let newArr = arr.map((e,index)=> { if(index >0){ e = e[0].toLocaleUpperCase() + e.slice(1,e.length); } return e }) return newArr.join(""); }

function change2Letter(str) { if(typeof str !== 'string'){ return '请输入字符串' } return /[0-9a-zA-Z\$]+\_/.test(str)?str.split('_').map(function (item,index) { return index === 0 ? item:item.substring(0,1).toUpperCase() + item.substring(1); }).join(''):str; }

function toCamelCase(str) {
  return str.replace(/_(\w)/g, function(m, $1) {
    return $1 ? $1.toUpperCase() : m
  })
}

toCamelCase('_a_b_c__')
function snakeToCamel ( string = `` ) {
  return string.replace( /\u005f([\u0061-\u007a])/gu, ( match, char ) => char.toUpperCase() );
}
// 1.传入参数,判断字符串类型,非返回
// 2.通过split('_')把字符串分割成数组
// 3.遍历数组把每一项开头转换成大写字母,并把每一项都拼接到一起
// 4.返回字符串
function changeStr(str){
  let arr = [];
  let newStr = '';
  if(!str||str===' '|| typeof str !== 'string'){
    return false;
  }
 arr = str.split('_');
 arr.map(item => {
   if(item){ //过滤空字符
      newStr += item.substr(0,1).toUpperCase()+item.substr(1)
   }
 });
 console.log(newStr);
}
changeStr('_abc_ghe_nb_w_') // 输出:AbcGheNbW

function changeStr(str){
var newName = '';
var arr = str.split('_');
var first = arr[0];
if(arr.length == 1){
console.log(first)
}else{
for(var i=1;i newName += arr[i].charAt(0).toUpperCase() + arr[i].substr(1,arr[i].length)
if(i==arr.length-1){
console.log(first+newName)
}
}
}
}

changeStr("add_ffff_dd")

let val = 'a_b_c' function conversion(val) { if (val.indexOf('_') !== -1) { // 判断是否有下划线存在 let arr = val.split('_') // 切割字符串 let str = arr[0] // 第一个字符串首字母不用大写 for (let i = 1; i < arr.length; i++) { // 其余字符串首字母转成大写 let str_item = arr[i].replace(arr[i][0], arr[i][0].toUpperCase()) str += str_item // 拼接字符串 } console.log(str) } } conversion(val)

var test = "my_js_is_so_poor"
var result = test.split('_').reduce((acc, cur) => acc + cur.slice(0, 1).toUpperCase() + cur.slice(1))
console.log(result)

        function transformName(s) {
            const arr = s.split('_');
            let newS = arr.reduce((a,b) => {
                b = b[0].toUpperCase() + b.slice(1);
                return a + b
            },'')
            return newS
        }
function toCamelCase(sourceString) {
        if (typeof sourceString !== "string") {
          return ""
        }
        return sourceString.split("_").reduce((previousValue, currentValue) => {
          if (currentValue.length > 0) {
            if (previousValue === "") {
              return currentValue
            } else {
              let firstChar = currentValue.substr(0, 1).toUpperCase()
              return previousValue + firstChar + currentValue.substring(1)
            }
          } else {
            return previousValue
          }
        }, "")
      }

‘get_element_by_id’.replace(/(_w)/g, a=>a[1].toUpperCase() )

function convertToCamelName(str){
  return str.split('_').map(word => (word.substring(0, 1).toUpperCase() + word.substring(1))).join('');
}
convertToCamelName('aaa_bbb_ccc');

function changeLowercase(str) {
return str.replace(/(?<=_)[a-zA-Z]/g,word=>word.toUpperCase()).split('_').join('')
}

let newstr=changeLowercase('aa_bssq_ceeg')//aaBssqCeeg
// 不知道为啥代码提交后split('_')的中间那下划线不在了

function toCamel(str) {
    const reg = /_+([^_])+?|(_+)/g
    return ('_' + str).replace(reg, (m, $1) => ($1 || '').toUpperCase())
}

toCamel('a_b_c_de____def_____') // "ABCDeDef"
function tuofeng(str){
    let t =str.split('_');
    let ki=[];
    ki.push(t[0]);
    for (let index = 1; index < t.length; index++){
        let u =[...t[index]];
        u[0]=(u[0].toUpperCase());
        ki.push(u.join(''));
    }
    return ki;
}
function lineToUpper(str) {
  return str.replace(/\_(.){1}/g, (all, item) => {
    return item.toUpperCase();
  });
}

lineToUpper("use_info_data");
const str = 'student_name'
function lineToUpperCase(str){
  const splitedStr = str.split('_')
  return splitedStr[0]+splitedStr.slice(1).map(toUpperCaseFirst).join('')
}
function toUpperCaseFirst(str){
  return str.substr(0,1).toUpperCase()+str.substr(1)
}
lineToUpperCase(a) //studentName

写一个方法把下划线命名转成大驼峰命名
大驼峰式:(big camel-case) 每个单词的第一个字母都大写;

``JavaScript function bigCamelCase(str) { const strArr = str.split('_').map(s => { s =${s[0].toUpperCase()}${s.slice(1)}`
return s
})
return strArr.join('')
}
console.log(bigCamelCase('a_b_came_aa'))
````

function bigCamelCase(str) {
    return str.replace(/(^|\_)\w/g, match => match[match.length - 1].toUpperCase())
}

const translate = (str) => str.split('_').map(s => s.substr(0, 1).toUpperCase() + str.substr(1)).join('');

function fn(str) {
    var arr = str.split('_');
    for(let i = 1; i < arr.length; i++) {
        let c = arr[i][0];
        arr[i] = c.toUpperCase() + arr[i].substring(1);
    }
    return arr.join('');
}
/**
 * 写一个方法把下划线命名转成大驼峰命名
 * @param {String} str 
 */
function transform(str) {
  return str
    .split("_")
    .map((item, index) => index > 0 && item ? item && item[0].toLocaleUpperCase() + item.slice(1) : item)
    .join("");
}
console.log(transform("_aa_bb_cc_")); // "AbBbCc"
console.log(transform("aa_bb_cc"))    // "aaBbCc"  
 function changeStr(str){
   if(str.split('_').length==1)return;
   str.split('_').reduce((a,b)=>{
     return a+b.substr(0,1).toUpperCase() + b.substr(1)
   })
}

这个函数缺少返回值,应该加上个return

  • 驼峰分为大驼峰和小驼峰
  • 原理: 循环正则匹配 \w_\w 字符串,如果匹配到,说明需要进行替换,如果匹配不到,说明不需要替换
  • 首字母为 _ 和尾字母为 _ 的不做替换
function toCamel(str, isBigCamel = false) {
  if (isBigCamel) {
    str = str.replace(/(\w)/, (match, $1) => `${$1.toUpperCase()}`);
  }
  while (str.match(/\w_\w/)) {
    str = str.replace(/(\w)(_)(\w)/, (match, $1, $2, $3) => `${$1}${$3.toUpperCase()}`);
  }
  return str;
}
const toCamel = (s) => {
  return s.replace(/(_[a-z])/ig, ($1) => {
    return $1.toUpperCase()
      .replace('_', '');
  });
};

let a = "awklfjwaklfj_awijfaw_lkgjaw"
let arr = a.split('_')
arr.map((x,index)=>{
if(index!==0){

     x = x.replace(x[0],x[0].toUpperCase())

}
})

let a = "awklfjwaklfj_awijfaw_lkgjaw"
let arr = a.split('_')
arr.map((x,index)=>{
if(index!==0){

     x = x.replace(x[0],x[0].toUpperCase())

}
})

function convertStr(str) {
  str = str.replace(/^_*|_*$/g, '');
  let index = str.indexOf('_')
  if (index === -1) return str
  let arr = [...str]
  arr.splice(index, 2, arr[index + 1].toUpperCase())
  return convertStr(arr.join(''))
}


console.log(convertStr('_abc_abc_def___'))

// abcAbcDef


function strSwitch(str) {
  if (typeof str !== 'string') {
    return;
  }
  var firstIndex = str.indexOf('_');
  if (firstIndex === 0) {
    str = str.replace('_', '')
  }
  let strArr = str.split('_')
  strArr = strArr.filter(d => d); 
  var resArr = strArr.map((item, index) => {
    if (index === 0) {
      return item
    }
    if (index > 0) {
      return item.replace(item[0], item[0].toUpperCase());
    }
  })
  console.log(resArr.join(''))
}

strSwitch('arr_dd_ddd');
/**
 * @param {string} str
 * @return {string}
 */
function toCamel(str) {
  return str.replace(/[a-z]_([a-z])/g, (match, $1) => $1.toUpperCase());
}
function toCamelCase(val) {
  return typeof val === "string"
    ? val
        .split("_")
        .map(v => v.slice(0, 1).toUpperCase() + v.slice(1))
        .join("")
    : false;
}
console.log(toCamelCase("_a_cde_f__")); //ACdeF

function changeName(str) {
var num = new Array();
var newname = "";
if (typeof str !== "string") {
alert("请输入字符串!");
return;
}
var mystr = str.split("_");
for (var i = 0; i < mystr.length; i++) {
var str = mystr[i];
if (str != "") {
var big = str[0].toUpperCase();
newname = newname + big + str.substring(1);
}
}
return newname;
}

function tuoFeng(val) {
let arr = val.split("_");
let newarr = [];
arr.map((item, index) => {
if (index !== 0) {
if (item[0]) {
newarr.push(item.replace(item[0], item[0].toUpperCase()));
}
}
});
newarr.unshift(arr[0].replace(arr[0][0], arr[0][0].toUpperCase()));
return newarr.join("");
}
console.log(tuoFeng("a_zeng_end"));//AZengEnd

function toCamel(str) {
return str.replace(/(w)(_)(w)/g, (match, p1, p2, p3) => ${p1}${p3.toUpperCase()});
}

/**
 * 大驼峰: toUpperCamelCase()
 * 小驼峰:toLowerCamelCase()
**/
const str = 'aa_bb_cc',
  splitChar = '_'
{
  function toUpperCamelCase(str, connChar) {
    const strArr = str.split(connChar)
    if (strArr.length === 1) return
    const result = strArr.map(item => item.charAt(0).toUpperCase() + item.slice(1))
    return result.join('')
  }

  const result = toUpperCamelCase(str, splitChar)
  console.log(result)
}

{
  function toLowerCamelCase(str, connChar) {
    const strArr = str.split(connChar)
    if (strArr.length === 1) return
    const result = strArr.map((item, idx) => {
      return idx ? item.charAt(0).toUpperCase() + item.slice(1) : item
    })
    return result.join('')
  }

  const result = toLowerCamelCase(str, splitChar)
  console.log(result)
}

{
  function toUpperCamelCase(str, connChar) {
    const strArr = str.split(connChar)
    if (strArr.length === 1) return
    const result = strArr.reduce((acc, curr) => {
      return acc + curr.substr(0, 1).toUpperCase() + curr.substr(1)
    }, '')
    return result
  }

  const result = toUpperCamelCase(str, splitChar)
  console.log(result)
}

{
  function toLowerCamelCase(str, connChar) {
    const strArr = str.split(connChar)
    if (strArr.length === 1) return
    const result = strArr.reduce((acc, curr) => {
      return acc + curr.substr(0, 1).toUpperCase() + curr.substr(1)
    })
    return result
  }

  const result = toLowerCamelCase(str, splitChar)
  console.log(result)
}

const toUpperCamelCase = string => string.split('_').map((word,i)=>{
if(i==0) return word
else {
return word.replace(/(bw)/,RegExp.$1.toLocaleUpperCase())
}
}).join('')
toUpperCamelCase('apple_apply_append_app')
"appleApplyAppendApp"

function change(str) {
            let reg = /_[a-z]{1}/g;
            return str.replace(reg,(item) => {
                return item.charAt(1).toUpperCase();
            });
 }
var name = function(str){
    var arr = str.split('')
    for(let i=0;i<arr.length;i++){
        if(i===0){
            arr[i] = arr[i].toUpperCase()
        }
        if(arr[i]==="_"){
            arr[i+1] = arr[i+1].toUpperCase()
        }
    }
    var temp = arr.join('')
    var reg = /_+/g
    var res = temp.replace(reg,'')
    return res

}
console.log(name('abb_b_ca'))

第4天 写一个方法把下划线命名转成大驼峰命名

function trans(str){
  var reg = /(^\w)|_(\w)/;
  return str.replace(reg, function(){
    if(arguments[1]) return arguments[1].toUpperCase();
    else return arguments[2].toUpperCase();
})
function toPascal(s) {
    return s.split('_').filter(w => w).map(w => w[0].toUpperCase() + w.slice(1)).join('');
}
console.log(toPascal('_to_pascal'));
const cases = {
  camelCase: 'helloWorldEveryone',
  pascalCase: 'HelloWorldEveryone',
  snakeCase: 'hello_world_everyone',
  kebabCase: 'hello-world-everyone',
}

const camelCase2PascalCase = str => {
  if (typeof str !== 'string') {
    throw new TypeEroor('invalid arguments value `str`')
  }
  // 这里未验证str是否是camelCase,直接把首字母转大写
  return str.replace(/^\w/, match => match.toUpperCase())
}

// @TEST: camelCase2PascalCase
console.log('camelCase2PascalCase:', camelCase2PascalCase(cases.camelCase)) // HelloWorldEveryone

const camelCase2SnakeCase = str => {
  if (typeof str !== 'string') {
    throw new TypeEroor('invalid arguments value `str`')
  }
  return str.replace(/[A-Z]/g, match => `_${match.toLowerCase()}`)
}

// @TEST: camelCase2SnakeCase
console.log('camelCase2SnakeCase:', camelCase2SnakeCase(cases.camelCase)) // hello_world_everyone

const camelCase2KebabCase = str => {
  if (typeof str !== 'string') {
    throw new TypeEroor('invalid arguments value `str`')
  }
  return str.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`)
}

// @TEST: camelCase2KebabCase
console.log('camelCase2KebabCase:', camelCase2KebabCase(cases.camelCase)) // hello-world-everyone

const pascalCase2CamelCase = str => {
  if (typeof str !== 'string') {
    throw new TypeEroor('invalid arguments value `str`')
  }
  return str.replace(/^\w/, match => match.toLowerCase())
}

// @TEST: pascalCase2CamelCase
console.log('pascalCase2CamelCase:', pascalCase2CamelCase(cases.pascalCase)) // helloWorldEveryone

const pascalCase2SnakeCase = str => {
  if (typeof str !== 'string') {
    throw new TypeEroor('invalid arguments value `str`')
  }
  // 先替换非首字母的大写字母,再替换首字母。也许有更优雅的解法?
  return str
    .replace(/([^A-Z])([A-Z])/g, (match, p1, p2) => `${p1}_${p2.toLowerCase()}`)
    .replace(/\w/, match => match.toLowerCase())
}

// @TEST: pascalCase2SnakeCase
console.log('pascalCase2SnakeCase:', pascalCase2SnakeCase(cases.pascalCase)) // hello_world_everyone

const pascalCase2KebabCase = str => {
  if (typeof str !== 'string') {
    throw new TypeEroor('invalid arguments value `str`')
  }
  return str
    .replace(/([^A-Z])([A-Z])/g, (match, p1, p2) => `${p1}-${p2.toLowerCase()}`)
    .replace(/\w/, match => match.toLowerCase())
}

// @TEST: pascalCase2KebabCase
console.log('pascalCase2KebabCase:', pascalCase2KebabCase(cases.pascalCase)) // hello-world-everyone

const snakeCase2CamelCase = str => {
  if (typeof str !== 'string') {
    throw new TypeEroor('invalid arguments value `str`')
  }
  return str.replace(/_(\w)/g, (match, p1) => p1.toUpperCase())
}

// @TEST: snakeCase2CamelCase
console.log('snakeCase2CamelCase:', snakeCase2CamelCase(cases.snakeCase)) // helloWorldEveryone

const snakeCase2PacalCase = str => {
  if (typeof str !== 'string') {
    throw new TypeEroor('invalid arguments value `str`')
  }
  return str.replace(/(^|_)(\w)/g, (match, p1, p2) => p2.toUpperCase())
}

// @TEST: snakeCase2PacalCase
console.log('snakeCase2PacalCase:', snakeCase2PacalCase(cases.snakeCase)) // HelloWorldEveryone

const snakeCase2KebabCase = str => {
  if (typeof str !== 'string') {
    throw new TypeEroor('invalid arguments value `str`')
  }
  return str.replace(/_/g, '-')
}

// @TEST: snakeCase2KebabCase
console.log('snakeCase2KebabCase:', snakeCase2KebabCase(cases.snakeCase)) // hello-world-everyone

const kebabCase2CamelCase = str => {
  if (typeof str !== 'string') {
    throw new TypeEroor('invalid arguments value `str`')
  }
  return str.replace(/-(\w)/g, (match, p1) => p1.toUpperCase())
}

// @TEST: kebabCase2CamelCase
console.log('kebabCase2CamelCase:', kebabCase2CamelCase(cases.kebabCase)) // helloWorldEveryone

const kebabCase2PacalCase = str => {
  if (typeof str !== 'string') {
    throw new TypeEroor('invalid arguments value `str`')
  }
  return str.replace(/(^|-)(\w)/g, (match, p1, p2) => p2.toUpperCase())
}

// @TEST: kebabCase2PacalCase
console.log('kebabCase2PacalCase:', kebabCase2PacalCase(cases.kebabCase)) // HelloWorldEveryone

const kebabCase2SnakeCase = str => {
  if (typeof str !== 'string') {
    throw new TypeEroor('invalid arguments value `str`')
  }
  return str.replace(/-/g, '_')
}

// @TEST: kebabCase2SnakeCase
console.log('kebabCase2SnakeCase:', kebabCase2SnakeCase(cases.kebabCase)) // hello-world-everyone

Snipaste_Nikolausliu_2019-11-26_18-10-35

本来想写一个函数,传str,from,to三个参数来处理所有的case转换,没能写出来

let toCamel = (str) => {
    let arr = str.split('_');
    for (let i = 1; i < arr.length; i++) {
        let value = arr[i];
        arr[i] = value[0].toUpperCase() + value.slice(1);
    }
    return arr.join('');
}
console.log(toCamel('test_apply_uahy'));
(str) => {
    let functionName = str.split('_').map(t => t[0].toUpperCase() + t.substr(1))
    return functionName[0].toLowerCase() + functionName.substr(1)
}
  function linToUp(str = 'aa_bb_cc') {
        return str.split('_').map((item, index) => {
            return index === 0 ? item : item[0].toUpperCase() + item.substring(1, item.length)
        }).join('')
    }

function Conversion(str) {
var arg = str.split('');
var index = arg.indexOf('_');
arg.splice(index, 1);
arg[index] = arg[index].toLocaleUpperCase();
return arg.join('');
}

下划线转小驼峰 大驼峰

function toCamel(str, type) {
    var arr = [];
    arr = str.split("");
    var res = arr.map((item, index) => {
        if (item === '_') {
            item = "";
            if (arr[index + 1]) arr[index + 1] = arr[index + 1].toLocaleUpperCase();
        }
        return item;
    });
    var resStr = res.join("");
    switch (type) {
        case 'small':
            resStr = resStr.replace(resStr[0], resStr[0].toLocaleLowerCase());
            break;
        case 'big':
            resStr = resStr.replace(resStr[0], resStr[0].toLocaleUpperCase());
            break;
        default:
            throw "转换类型错误 仅限 small  big"
    }
    return resStr;
}
console.log("小驼峰", toCamel("user_name", "small"));//小驼峰
console.log("大驼峰", toCamel("user_name", "big"));//大驼峰
function getStr(str){
        return str.replace(/(\_\w)/g,function($0){
            return $0[$0.length-1].toUpperCase()
        })
    }
//第4天 写一个方法把下划线命名转成大驼峰命名
// hello-world-vue => helloWorldVue
function capitalize(str) {
  return str.charAt(0).toUpperCase() + str.substring(1);
}
function dashToCamel(str) {
  var strs = str.split("-");
  return strs.map(capitalize).join("");
}

var str = "hello-world-vue";
console.log(dashToCamel(str));
function camelCase(str) {
    return str.trim().replace(/_{1,}([a-zA-Z]|$)/g, function (_, char) {
       return char.toUpperCase();
    });
}
console.log(camelCase(' _a_A__b_  '))
//第4天 写一个方法把下划线命名转成大驼峰命名
// hello-world-vue => helloWorldVue
function capitalize(str) {
  return str.charAt(0).toUpperCase() + str.substring(1);
}
function dashToCamel(str) {
  var strs = str.split("-");
  return strs.map(capitalize).join("");
}

var str = "hello-world-vue";
console.log(dashToCamel(str));
function capitalize(str) {
  return str.charAt(0).toUpperCase() + str.substring(1).toLowerCase();
}
function dashToCamel(str) {
  var strs = str.split("-");
  return strs
    .map((curr, index) => {
      if (index === 0) {
        return curr.toLowerCase();
      }
      return capitalize(curr);
    })
    .join("");
}

var str = "hello-world-vue";
console.log(dashToCamel(str));

上面那个有一点点错

````js
function toUpperCaseFun(str) {
let strArr = str.split('_');
let newStr = '';
strArr.forEach((item, index) => {
newStr += item.substr(0, 1).toUpperCase() + item.substr(1)
})
return newStr
}
console.log(toUpperCaseFun('a_bc_def_asdasd_qweqwewq_qweqwe_zxczxc'))

function upperCase(str) {
  let isMatch = false
  const target = '_'
  return str.split('').reduce((acc, cur) => {
    if (cur === target) {
      isMatch = true
      return acc
    }
    if (isMatch) {
      isMatch = false
      return acc + cur.toUpperCase()
    }
    return acc + cur;
  }, '')
}

console.log(upperCase('sd_f_s_d)f__sdf')) // "sdFSD)fSdf"
//题目是转成大驼峰,前面的同学都是转成小驼峰了
function toBigCamel(str){
    const strArr=str.split('_');
    const str2Arr=strArr.map((item, index)=> {
        let itemArr=item.split(''); 
        let item0 = itemArr[0].toUpperCase();
        itemArr[0] = item0; 
        return itemArr.join('');
     });
     return str2Arr.join('');
}

console.log(toBigCamel('lang_test_age'))  // "LangTestAge"
function trim(str){
  var array=str.split("");
  while(!(str.indexOf===-1)){
    var num=str.indexOf("_")+1;
    if(num===0) return str;
    array.splice(num,1,array[num].toUpperCase());
    array.splice(num-1,1);
    str=array.join("");
  }
}
let str = " a_c_def ";
function turn (str){
  let newarr=[];
  str.split('_').map(function(item){
    return newarr.push(item.replace(/^\w/,function(e){
      return e.toUpperCase();
    }))
  });
  return newarr.join('');
}
document.write(turn (str));

建议定义一下什么是驼峰,以及什么是下划线写法, 大家给出的答案都功能太强了, 抹消了很多有意义的信息.

例如 ____abc 中的 ____ 很有可能是需要保留的数据, 而 hello_world 才是一个规范的下划线写法.

我的示例如下, 基本原则只转换符合 hello_world 这样标准的下划线写法转到标准的驼峰写法, 如果连续输入 a_b_c 则视为期待转为驼峰均为大写, 如果下划线中包含大写, 则视为期待保留大写的同时转为驼峰:

    function transfor(str) {
      return str.replace(/(?<=[^_]+)_([a-z]|[A-Z])/g, (m, $1) => {
        return $1.toUpperCase();
      });
    }

可以看到尽可能的保留了下划线的存在:
image

function changeLine (str) {
var arr = str.split('_');
var newStr = '';
for (var i = 0; i < arr.length; i ++) {
if (arr[i] !== "") {
newStr += arr[i].charAt(0).toUpperCase() + arr[i].slice(1)
}
}
return newStr
}

str.split('_').map(item => item.replace(/^(.)/, (match, $1) => ${$1.toUpperCase()})) .join('');

const toCamel = (str) => {
    return str.replace(/^_+|_+$/g, '').replace(/_\S/g, ($1) => {
        return $1.toUpperCase().replace(/_+/, '')
    })
}
toCamel('_user_name_@zhangsan_info____****')  // 'userName@zhangsanInfo****'
function transformName (str) {
   return str.split('_').reduce((s, item) => {
     return s + item.charAt(0).toUpperCase() + item.slice(1)
   })
}

function match(str) {
if (typeof str !== 'string') {
alert('请输入字符串')
return
}
return str
.replace(/(?<=_)w/g, function(match) {
return match.toUpperCase()
})
.split('_')
.join('')
}

function toCamel(str) {
    return str.replace(/(\w)_(\w)/g, function(match, $1, $2) {
        return $1 + $2.toUpperCase();
    });
}
function toCamel(underline) {
  let arr = underline.split(/_+/).map((item, index) => {
    return index === 0 ? item : item.replace(/^\w/, item.charAt(0).toUpperCase())
  })
  return arr.join('')
}

console.log(toCamel('aa_bb___cc_d'))  //aaBbCcD

// 写一个方法 将下划线命名改成驼峰命名方法
function replaceStr(str) {
if (!str.length) {
return '';
}
let targetIndex = null;
return str.split('').map((item, index) => {
if (item === '_') {
targetIndex = Number(index) + 1;
return null;
} else if (index === targetIndex) {
return item.toUpperCase();
} else {
return item;
}
}).join('');
}

const target = 'kobe_gigi_AI';

replaceStr(target);

function toHump(a){
  var strs = a.split("_");
  for(i = 0;i < strs.length;i ++){
    var index =  strs[i].split("");
    index[0] = index[0].toUpperCase();
    strs[i] = index.join("");
  }
  a = strs.join("");
  return a;
} 
function strToCamelCase(str) {
  return str
  .split('_')
  .map(item=>{
    if(item === ''){
      return '_'
    }
    return item[0].toUpperCase()+item.slice(1);
  })
  .join('');
}

mark
const _ToCamel = str => str.split("_")
. filter( s => !!s)
.map( (v,i) => i===0 ? v : v[0].toUpperCase() + v.slice(1)))
.join('')

我改了一下,这个没有错误了
const ToCamel = str => str.split("_")
. filter( s => !!s)
.map( (v,i) => i===0 ? v : v[0].toUpperCase() + v.slice(1))
.join('')

------------------ 原始邮件 ------------------
发件人: "xuzhouchen1104"<[email protected]>;
发送时间: 2020年4月26日(星期天) 上午10:53
收件人: "haizlin/fe-interview"<[email protected]>;
抄送: "Subscribed"<[email protected]>;
主题: Re: [haizlin/fe-interview] [js] 第4天 写一个方法把下划线命名转成大驼峰命名 (#12)

mark
const ToCamel = str => str.split("")
. filter( s => !!s)
.map( (v,i) => i===0 ? v : v[0].toUpperCase() + v.slice(1)))
.join('')


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or unsubscribe.

function toHump(str){
  if(typeof str !== 'string'){
    return 
  }
  let temp = str.split('')
  for(let index in temp){
    if(temp[index] === '_'){
      temp[index - 0 + 1] = temp[index - 0 + 1].toUpperCase()
    }
  }
  return temp.join('').replace(/_/g, '')
}
function strToCamel(str){
    return str.split('_').map(item=>item.slice(0,1).toUpperCase() + item.slice(1)).join('');
}

var strHump = (str) => str.replace(/_w/g, data => data.replace('_', '').toLocaleUpperCase())

const toCamelCase = (str='') => {
    return str.split('_').map(item=>item.charAt(0).toUpperCase()+item.slice(1).toLowerCase()).join('');
};
toCamelCase('a_c_def'); // ACDef
function fn(str) {
    str = str.split("_");
    var newstr = str[0];
    for (var i = 1; i < str.length; i++) {
        str[i] = str[i].slice(0, 1).toUpperCase() + str[i].slice(1);
        newstr += str[i];
    }
    return newstr;
}
function ToCamel(str) {
    if (str.indexOf('_') == 0 || str.lastIndexOf('_') == str.length - 1) {
      return str//下划线开头或结尾不处理
    } 
    let arr = str.split('_')
    arr.forEach((v, index) => {
      arr[index] = v.substr(0, 1).toUpperCase() + v.substr(1)
    });
    result = arr.join('')
  }
  console.log(ToCamel('to_came_str_'))

let str = 'My_name_Is_LiLi';
function toUp(st) {
let arr = st.split('_');
return arr.map(function (item, i) {
if (!i) {
return item[0].toLowerCase() + item.slice(1);
}
else {
return item[0].toUpperCase() + item.slice(1);
};
}).join('');
}
let st = toUp(str);

function camelCase(str){
var str1;
var newstr=new Array();
str1=str.split("_");

str1.map(item=>{
    if(item)
    {
        newstr+=item.substr(0,1).toUpperCase()+item.substr(1)
    }
})
return newstr;

}

var str4=camelCase('The-Stealth-Warrior');
console.log(str4);

  var str_n = "";
  function get(str) {
    var arr = str.split("_");
    for (let i = 0; i < arr.length; i++) {
      if (i == 0) {
        str_n = arr[0];
      } else {
        arr[i] = arr[i].substr(0, 1).toUpperCase() + arr[i].substr(1);
        str_n = str_n + "_" + arr[i];
      }
    }
    return str_n;
  }

function fn(str) {
if (typeof str !== 'string') return false;
return str.split('_').map((item, index) =>{
if (index > 0) {
return ${item.slice(0, 1).toUpperCase()}${item.slice(1)};
}
return item;
}).join('');
}

function hump(strOri) {
let str = '';
strOri.split('_').forEach((_, index) => {
if (index == 0) {
str += _;
} else {
let tmp = _.charAt(0).toUpperCase() + _.substr(1);
str += tmp;
}

});
return str;

}
hump('abc_de_fg')

啊到底在什么样的情况下会出现_a___a__cb____这样的下划线命名,而且题目要求的是转成大驼峰,前面好多朋友写成了小驼峰命名了

大驼峰

function toPascal(str) {
    return str.replace(/(^|_)([a-z])/g, (match, $1, $2) => `${$2.toUpperCase()}`)
        .replace(/_/g, '');
}

console.log(toPascal("a_bc_d"));            //ABcD
console.log(toPascal("a_c_def"));           //ACDef
console.log(toPascal("bc_d"));              //BcD
console.log(toPascal("bc___________ed"));   //BcEd
console.log(toPascal("_______a__bc_d__"));  //ABcD
console.log(toPascal("ac_______a_bc_d__")); //AcABcD

小驼峰

function toCamel(str) {
    str = str
        .replace(/(?<=_)([a-z])/g, (match, $1) => `${$1.toUpperCase()}`)
        .replace(/_/g, '')
        .replace(/(^[A-Z])/, (match, $1) => `${$1.toLowerCase()}`);
    return str
}

console.log(toCamel("a_bc_d"));   //aBcD
console.log(toCamel("a_c_d"));     //aCD
console.log(toCamel("bc_d"));      //bcD
console.log(toCamel("bc___________ed"));  //bcEd
console.log(toCamel("_______a_bc_d__"));  //aBcD

第4天 写一个方法把下划线命名转成大驼峰命名

function demoStr (str) {

let strarr = str.split('_');

let tes = strarr.map(element => {

   return  element.slice(0,1).toUpperCase() + element.slice(1).toLowerCase();
 });

return tes.join('');
}

console.log(demoStr('my_name'))

function changeToCamel(str) {
    if(typeof str !== 'string') return 'str is not a number'
    return str.split('_').map(item => item[0] && item[0].toUpperCase() + item.substr(1)).join('')
}
function transoform(str) {
    var result = str.split('');
    result.forEach(function(e, i, a) {
        if (e === '_') { a[i + 1] = a[i + 1].toUpperCase(); }
    });
    return result.join('').replace(/\_*/g, '');
}
var result = transoform('if_you_are_my_world');
console.log(result); // ifYouAreMyWorld

有一个小问题,当str以 _ 结尾的时候,不存在 a[i+1]

if(res[i+1]){
res[i+1]=res[i+1].toUpperCase()
}

function underlineTransformCamel(str) {
    if (!(typeof str === 'string')) {
        throw new Error('str must be string');
    }
    const arr = str.split(/_+/g);
    if (arr.length > 1) {
        return arr.map((item, index) => {
            if (index !== 0 && item) {
                return `${item.charAt(0).toLocaleUpperCase()}${item.slice(1).toLocaleLowerCase()}`;
            }
            return item;
        }).join(''); 
    }
    return arr.join('');
}

console.log(underlineTransformHump('name'));
console.log(underlineTransformHump('__name'));
console.log(underlineTransformHump('name__'));
console.log(underlineTransformHump('__name__'));
console.log(underlineTransformHump('name_value'));
console.log(underlineTransformHump('name_value_alias'));
console.log(underlineTransformHump('name__value_alias'));
console.log(underlineTransformHump('name__VALUE_alias'));
console.log(underlineTransformHump('name__VALUE_1ALIAS234'));

line2upper = str => str.replace(/s/g,"").replace(/_{0,1}([^_])([^_]*)/g, (_,$1,$2)=>$1.toUpperCase()+$2);

function test(params) {
    let str = "";
    let bb = params.split("_");
    for (let i = 1; i < bb.length; i++) {
        str += (bb[i].substr(0, 1).toLocaleUpperCase() + bb[i].substr(1));
    }
    return bb[0] + str;
}
console.log(test("if_you_are_my_world"));
function transformCamelCase(name) {
    return name.split('_').map((n, index) => index > 0 ? n.substr(0,1).toUpperCase() + n.substr(1) : n).join('')
}
//写一个方法把下划线命名转成大驼峰命名

function modifyTheName(str) {
    let res = "";
    let flag = 0;
    str = str.toLowerCase();
    for (c of str) {
        if (c == "_") {
            flag = 1;
            continue;
        }
        if (flag > 0){
            c = c.toUpperCase();
            flag = 0;
        }
        res += c;
    }
    return res;
}


test = "ttt_aasDDFSdsad_Sadasd";
res = modifyTheName(test);
console.log(res);

function transformCamelCase(str) {
  return str.split('_').map((item, index) => index > 0 ? item.slice(0, 1).toUpperCase() + item.slice(1) : item).join('')
}

let str = 'hahaha_ddfdf_rtrt_e'
console.log(toUpper(str))

function toUpper(str) {
if (typeof str != string) {
console.log('输入字符串')
retrun
}
let arr = str.split('_')
arr.map((item, index) => {
if (index > 0) {
let itemArr = item.split('')
itemArr[0] = itemArr[0].toUpperCase()
arr[index] = itemArr.join('')
}
})

return arr.join('')
}

/**
 * 
 * @param {string} s 
 */
const x = (s) => {
  s.match(/([a-z]{1}_[a-z]{1})/g).forEach(m => {
    s = s.replace(m, p => p.split('_').reduce((a, b) => (a + b.toLocaleUpperCase())))
  })
  return s

}
console.log(
  x('a_bcd_e'), // aBcdE
  x('_ab_c'), // _abC
  x('process_env_dev') // processEnvDev
) 

如果有错误,请大佬戳我 _(:_」∠)_

const str = 'test_name_subname'

function toCamel (str) {
  return str.replace(/_\w/g, (str => str.slice(1).toUpperCase()))
}

console.log(toCamel(str));
Was this page helpful?
0 / 5 - 0 ratings