js物件屬性駝峰式命名(帶數字)轉下劃線命名
阿新 • • 發佈:2018-10-31
將類似於 info 格式轉化為 info2
var info = { id: 1, id1: 2, userName1: '劉玄德', userName2: '劉玄德', userName3: '大哥', userAge: 45, userAge1: 46, userAge2: 47 } var info2 = { id: 1, id_1: 2, user_name_1: '劉玄德', user_name_2: '劉玄德', user_name_3: '劉玄德', user_age: 45, user_age_1: 46, user_age_2: 47 }
下屬兩種解決方案:可謂相當瀟灑的答案,一行搞定
// segmentDefault回答者 asseek 的答案: const toLine = hump => hump.replace(/([A-Z]|\d)/g, (a, l) => `_${l.toLowerCase()}`); var info = { id: 1, id1: 2, userName1: '劉玄德', userName2: '劉玄德', userName3: '大哥', userAge: 45, userAge1: 46, userAge2: 47 }; var newObj = {} for (let k in info) { newObj[toLine(k)] = info[k] } console.log(newObj)
本人的答案,想了很久,asseek 的答案可謂是天上飛,我的答案就是地上爬了
<script> var info = { id: 1, id1: 2, userName1: '劉玄德', userName2: '劉玄德', userName3: '大哥', userAge: 45, userAge1: 46, userAge2: 47 } var info2 = { id: 1, id_1: 2, user_name_1: '劉玄德', user_name_2: '劉玄德', user_name_3: '劉玄德', user_age: 45, user_age_1: 46, user_age_2: 47 } function copy(obj){//用於複製一個物件 var newobj = {}; for ( var attr in obj) { newobj[attr] = obj[attr]; } return newobj; } var changeObj = function (obj) { var copyobj = copy(obj) var regNum = new RegExp(/\d/) var regStr = new RegExp(/[A-Z]/g) var arr = Object.keys(obj); var newObj = {} arr.forEach((k, index) => { var kArr = k.split('') var newK = '' kArr.forEach((item,index)=>{ if(regNum.test(item)){ kArr[index] = "_" + item } if(regStr.test(item)){ kArr[index] = "_" + item.toLowerCase() } }) newKey = kArr.join('') newObj[newKey] = obj[k] console.log(newKey) }) console.log(newObj) return newObj } changeObj(info) </script>