簡體   English   中英

如何小寫對象中鍵的第一個字母?

[英]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替代方法。

使用reduceObject.keystoLowerCase和模板字符串

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM