【问题标题】:How to uppercase Javascript object keys?如何大写Javascript对象键?
【发布时间】:2026-02-05 18:45:02
【问题描述】:

有谁知道转这个的好方法吗?:

var obj = [{key1: value1,key2: value2},{key3: value3,key4: value4}];

进入:

var obj = [{Key1: value1,Key2: value2},{Key3: value3,Key4: value4}];

【问题讨论】:

  • 您有什么理由要这样做吗?任何使用旧键的代码都会中断,因为键区分大小写。
  • 您是否正在寻找正则表达式或在代码运行时执行此操作的方法?
  • @Marc B,我很可能会选择这样做,例如,如果我正在制作 jqgrids 并且列名的首字母大写。然后说我从现有的 API 中获取 json,并且键实际上必须匹配大小写,以便 jqgrid 能够正常运行。在这种情况下,我想保证我从 json 获得的键也有一个大写的首字母,并且匹配。
  • @tjameson,鉴于我必须执行此操作的频率,速度不是瓶颈,所以我会说任何功能都有效,包括正则表达式。

标签: javascript jquery


【解决方案1】:

循环删除和替换:

var obj = [{key1: 1,key2: 1},{key3: 1,key4: 1}];
for(var i = 0; i<obj.length;i++) {

    var a = obj[i];
    for (var key in a) {
        if (a.hasOwnProperty(key)) {
          a[key.charAt(0).toUpperCase() + key.substring(1)] = a[key];
          delete a[key];
          
        }
    }
    obj[i] = a;

}

【讨论】:

  • +1,但请注意,如果起始对象同时包含特定键名的小写和首字母大写版本,则后者将被覆盖。即,{key1:1, Key1:2} 最终将成为 {Key1:1}。 (另外,for 之后的 obj[i] = a; 是多余的不是吗?)
  • 唯一的区别是我使用了切片而不是子字符串。否则,这很好。
  • 设置新属性后可以删除原来的属性(a[key]),就不需要临时变量了。
  • Object.keys(a).forEach((key) => { a[key.charAt(0).toUpperCase() + key.substring(1)] = a[key]; 删除一个[键];});
【解决方案2】:

截至 2019 年,您可以使用 Object.fromEntries

let populations = {london: 8.9, beijing: 21.54, mumbai: 18.41};  // March 2020

let entries = Object.entries(populations);
let capsEntries = entries.map((entry) => [entry[0][0].toUpperCase() + entry[0].slice(1), entry[1]]);
let capsPopulations = Object.fromEntries(capsEntries);

console.log(capsPopulations);

【讨论】:

  • 你也可以在这里使用解构:entries .map (([k, v]) =&gt; [k [0] .toUpperCase () + k .slice (1), v]).
【解决方案3】:

另一种方法(更干净)

import * as _ from 'lodash';


function capitalizeObjectKeys(obj) {
  return _.transform(obj, (result, val, key) => {
    result[key.charAt(0).toUpperCase() + key.slice(1)] = val;
  });
}

https://stackblitz.com/edit/js-hsqutg?embed=1&file=index.js

【讨论】:

    【解决方案4】:

    就我而言,这段代码运行良好。大写和小写都带有地图:

    转大写:

    const newDataUpperCase = data.map( function( item ){
            for(var key in item){
                var upper = key.toUpperCase();
                if( upper !== key ){ 
                  item[ upper ] = item;
                    delete item[key];
                }
            }
            return item;
        });
    

    小写:

    const newDataUpperCase = data.map( function( item ){
            for(var key in item){
                var lower= key.toLowerCase();
                if( lower!== key ){ 
                  item[ lower] = item;
                    delete item[key];
                }
            }
            return item;
        });
    

    【讨论】:

      【解决方案5】:
          const transform = (arrObj) => {
          let newObj=[];
          for(let obj of arrObj) {
            let temp=new Object();
            let keys = Object.keys(obj);
            let values = Object.values(obj);
            let i=0;
            keys.forEach(key => {
                key=key[0].toUpperCase() + key.slice(1);
                temp[`${key}`]=values[i++];
            });
            newObj.push(temp);
          }
          return newObj;
        };
        const arrObj = [{first: 'satya', last:'prakash'}, {college: 'AIT'}];
        console.log(transform(arrObj));
        
      

      【讨论】:

        【解决方案6】:

        如果您只需要首字母大写,可以使用Jeremiah's answer

        或者如果您需要将每个单词的首字母大写,请考虑以下

        let populations = {"london": 8.9, "beijing": 21.54, "mumbai": 18.41, "new york": 19.4};
        let entries = Object.entries(populations);
        // Capitalize first letter of each word 
        let capsEntries = entries.map((entry) => [entry[0].replace(/(^\w{1})|(\s+\w{1})/g, letter => letter.toUpperCase()), entry[1]]);
        let capsPopulations = Object.fromEntries(capsEntries);
        
        console.log(capsPopulations)

        this answer采用的正则表达式

        正则表达式解释

        1. (^\w{1}): 匹配字符串的第一个字符
        2. |: 或
        3. (\s{1}\w{1}): 匹配一个空格后的一个字符
        4. g: 全部匹配
        5. match => match.toUpperCase():替换为可以取函数,所以;用大写匹配替换匹配

        【讨论】:

          【解决方案7】:

          使用 lodash 的 _.capitalize 函数

          _.capitalize('firstName') =&gt; FirstName

          【讨论】: