[英]How to lowercase the first alphabet of a key in an object?
我有一個 JavaScript 對象,我想將鍵的第一個字母變成小寫。
例如:key 是 Title 那么它應該是 title; 對於鍵 PublishDate 它應該是 publishDate 如果鍵是 Publish_Date 那么它應該是 publish_Date 等等。
根據從服務器接收的數據,對象可能更復雜
[ { "clientId":1, "Title":"Test", "Message":"fdsf", "Image":"", "PublishDate":"Feb 5 2020 12:00AM", "UserID":null, "authorName":"fdsfd", "announceType":"Admin", "IsAdmin":0, "TimeAgo":"1 days" }, { "clientId":1, "Title":"Test", "Message":"testing", "Image":"", "PublishDate":"Feb 5 2020 12:00AM", "UserID":null, "authorName":"Lorem Ipsum", "announceType":"Admin", "IsAdmin":0, "TimeAgo":"1 days" }, { "clientId":1, "Title":"Test", "Message":"testing ", "Image":"", "PublishDate":"Feb 5 2020 12:00AM", "UserID":null, "authorName":"Lorem Ipsum", "announceType":"CEO", "IsAdmin":0, "TimeAgo":"1 days" } ]
您可以.map()
每個對象到使用Object.fromEntries()
創建的新對象。 此方法采用[key, value]
對數組,您可以通過在.map()
方法中的每個對象上使用Object.entries()
來獲取該數組。 對於條目中的每個鍵,您可以將其首字母小寫。
請參閱下面的示例:
const data = [ { "clientId":1, "Title":"Test", "Message":"fdsf", "Image":"", "PublishDate":"Feb 5 2020 12:00AM", "UserID":null, "authorName":"fdsfd", "announceType":"Admin", "IsAdmin":0, "TimeAgo":"1 days" }, { "clientId":1, "Title":"Test", "Message":"testing", "Image":"", "PublishDate":"Feb 5 2020 12:00AM", "UserID":null, "authorName":"Lorem Ipsum", "announceType":"Admin", "IsAdmin":0, "TimeAgo":"1 days" }, { "clientId":1, "Title":"Test", "Message":"testing ", "Image":"", "PublishDate":"Feb 5 2020 12:00AM", "UserID":null, "authorName":"Lorem Ipsum", "announceType":"CEO", "IsAdmin":0, "TimeAgo":"1 days" } ]; const lowerCase = str => str[0].toLowerCase() + str. slice(1); const res = data.map( obj => Object.fromEntries(Object.entries(obj).map( ([k, v]) => [lowerCase(k), v]) ) ); console.log(res);
.as-console-wrapper { max-height: 100% !important;} /* ignore */
目前, Object.fromEntries()
確實有有限的瀏覽器支持,但是,它可以很容易地被 polyfill。 另一種方法是使用Object.assign()
並將每個條目映射到一個對象,然后將其擴展到一個更大的對象:
const data = [ { "clientId":1, "Title":"Test", "Message":"fdsf", "Image":"", "PublishDate":"Feb 5 2020 12:00AM", "UserID":null, "authorName":"fdsfd", "announceType":"Admin", "IsAdmin":0, "TimeAgo":"1 days" }, { "clientId":1, "Title":"Test", "Message":"testing", "Image":"", "PublishDate":"Feb 5 2020 12:00AM", "UserID":null, "authorName":"Lorem Ipsum", "announceType":"Admin", "IsAdmin":0, "TimeAgo":"1 days" }, { "clientId":1, "Title":"Test", "Message":"testing ", "Image":"", "PublishDate":"Feb 5 2020 12:00AM", "UserID":null, "authorName":"Lorem Ipsum", "announceType":"CEO", "IsAdmin":0, "TimeAgo":"1 days" } ]; const lowerCase = str => str[0].toLowerCase() + str. slice(1); const res = data.map( obj => Object.assign({}, ...Object.entries(obj).map( ([k, v]) => ({[lowerCase(k)]: v}) )) ); console.log(res);
.as-console-wrapper { max-height: 100% !important;} /* ignore */
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
const newKey = key[0].toLowerCase() + key.substr(1);
if (!obj.hasOwnProperty(newKey)) {
obj[newKey] = obj[key];
delete obj[key];
}
}
}
編輯:
我不是在質疑你想通過這樣做達到什么目的。
此外,值得注意的是,這會將新屬性置於對象的“末尾”。
編輯2:
刪除了break;
從我原來的答案,因為我以為你只是想修改第一個屬性。 此版本將修改所有屬性。
從字面上看你的問題,無論它從哪里開始,這段代碼都會將第一個字母字符小寫
const data = [ { "clientId":1, "0 Title":"Test", " 000Message":"fdsf", "Image":"", "PublishDate":"Feb 5 2020 12:00AM", "UserID":null, "authorName":"fdsfd", "announceType":"Admin", "IsAdmin":0, "00000 TimeAgo":"1 days" }, { "clientId":1, "Title":"Test", "Message":"testing", "Image":"", "PublishDate":"Feb 5 2020 12:00AM", "UserID":null, "authorName":"Lorem Ipsum", "announceType":"Admin", "IsAdmin":0, "TimeAgo":"1 days" }, { "clientId":1, "Title":"Test", "Message":"testing ", "Image":"", "PublishDate":"Feb 5 2020 12:00AM", "UserID":null, "authorName":"Lorem Ipsum", "announceType":"CEO", "IsAdmin":0, "TimeAgo":"1 days" } ]; const re = /([^AZ]+)?([AZ]{1})(.*)/ const dat = obj => { let newobj = {} Object.keys(obj).forEach(key => newobj[key.replace(re,function(_,a,b,c,d) { return (a!=undefined?a:"")+b.toLowerCase() + c })] = obj[key]); return newobj; }; console.log(data.map(entry => dat(entry)))
這將工作
const data = [ { "clientId":1, "Title":"Test", "Message":"fdsf", "Image":"", "PublishDate":"Feb 5 2020 12:00AM", "UserID":null, "authorName":"fdsfd", "announceType":"Admin", "IsAdmin":0, "TimeAgo":"1 days" }, { "clientId":1, "Title":"Test", "Message":"testing", "Image":"", "PublishDate":"Feb 5 2020 12:00AM", "UserID":null, "authorName":"Lorem Ipsum", "announceType":"Admin", "IsAdmin":0, "TimeAgo":"1 days" }, { "clientId":1, "Title":"Test", "Message":"testing ", "Image":"", "PublishDate":"Feb 5 2020 12:00AM", "UserID":null, "authorName":"Lorem Ipsum", "announceType":"CEO", "IsAdmin":0, "TimeAgo":"1 days" } ]; let test = data.map(t => dat(t)) function dat(obj) { var key, keys = Object.keys(obj); var n = keys.length; var newobj = {} while (n--) { key = keys[n]; newobj[key.charAt(0).toLowerCase() + key.slice(1)] = obj[key]; } return newobj } console.log(test)
更新:添加了使用forEach
替代方法。
使用reduce
、 Object.keys
、 toLowerCase
和模板字符串
const process = data => data.map(item => Object.keys(item).reduce( (acc, key) => ( (acc[`${key[0].toLowerCase()}${key.slice(1)}`] = item[key]), acc ), {} ) ); const processAlt = data => data.map( item => ( (obj = {}), Object.keys(item).forEach( key => (obj[`${key[0].toLowerCase()}${key.slice(1)}`] = item[key]) ), obj ) ); const data = [ { clientId: 1, Title: "Test", Message: "fdsf", Image: "", PublishDate: "Feb 5 2020 12:00AM", UserID: null, authorName: "fdsfd", announceType: "Admin", IsAdmin: 0, TimeAgo: "1 days" }, { clientId: 1, Title: "Test", Message: "testing", Image: "", PublishDate: "Feb 5 2020 12:00AM", UserID: null, authorName: "Lorem Ipsum", announceType: "Admin", IsAdmin: 0, TimeAgo: "1 days" }, { clientId: 1, Title: "Test", Message: "testing ", Image: "", PublishDate: "Feb 5 2020 12:00AM", UserID: null, authorName: "Lorem Ipsum", announceType: "CEO", IsAdmin: 0, TimeAgo: "1 days" } ]; console.log(process(data)); console.log(processAlt(data));
使用一些解構
const lowerCaseKeys = obj => Object.fromEntries(
Object.entries(obj).map(([[firstLetter, ...rest], value]) =>
[firstLetter.toLowerCase() + rest.join(''), value])
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.