首页 > 解决方案 > 如何小写对象中键的第一个字母?

问题描述

我有一个 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"
   }
]

标签: javascriptangularjsangularecmascript-6

解决方案


您可以将.map()每个对象添加到使用创建的新对象中Object.fromEntries()。此方法采用一组[key, value]对,您可以Object.entries()在方法中的每个对象上使用这些对.map()。对于条目中的每个键,您可以将其首字母小写。

请参见下面的示例:

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()确实有有限的浏览器支持,但是,它可以很容易地填充。另一种方法是使用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 */


推荐阅读