【问题标题】:Changing the case of JavaScript object keys更改 JavaScript 对象键的大小写
【发布时间】:2021-08-14 00:40:30
【问题描述】:

我有以下对象。

var obj = [{
  Address1: "dd",
  Address2: "qww",
  BankAccNo: "44",
  BankBranchCode: "44",
  BloodGrp: "A+"
},
{
  Address1: "dd",
  Address2: "qww",
  BankAccNo: "44",
  BankBranchCode: "44",
  BloodGrp: "A+"
}];

如何使所有键都大写?

我希望能够访问这样的值:-obj[0].ADDRESS1

【问题讨论】:

  • 为什么不直接访问它们?
  • @nnnnnn 可能是因为与某些数据库名称字段的一致性,只是猜测
  • 是的...我正在将此键与存储在数据库中的值匹配,这些值是大写的。!

标签: javascript


【解决方案1】:
obj = obj.map( function( item ){
    for(var key in item){
        var upper = key.toUpperCase();
        // check if it already wasn't uppercase
        if( upper !== key ){ 
            item[ upper ] = item[key];
            delete item[key];
        }
    }
    return item;
});

http://jsfiddle.net/07xortqy/

【讨论】:

  • 如果密钥已经是大写,这将不起作用。而且我不确定它在每个浏览器上如何工作,因为您在使用 for in 循环时更改了一个对象
  • @SebastienC。谢谢,为现有的大写键添加了保护措施。
【解决方案2】:
  1. 循环遍历对象中的所有属性(使用for in
  2. 使用.toUpperCase()获取属性名的大写版本
  3. 将值从原始属性复制到大写版本
  4. delete原产地

【讨论】:

  • 你很好地完成了帕维尔的回答
【解决方案3】:

对于正在寻找使用对象、数组和嵌套对象或数组的解决方案的任何人:

// rename function depending on your needs
const capitalizeKeys = (obj) => {
  const isObject = o => Object.prototype.toString.apply(o) === '[object Object]'
  const isArray = o => Object.prototype.toString.apply(o) === '[object Array]'
  
  let transformedObj = isArray(obj) ? [] : {}
  
  for (let key in obj) {
    // replace the following with any transform function
    const transformedKey = key.replace(/^\w/, (c, _) => c.toUpperCase())

    if (isObject(obj[key]) || isArray(obj[key])) {
      transformedObj[transformedKey] = capitalizeKeys(obj[key])
    } else {
      transformedObj[transformedKey] = obj[key]
    }
  }
  return transformedObj
}

const t = {
  test1: 'hello',
  test2: {
    aa: 0,
    bb: '1',
    cc: [ 3, '4', 'world']
  },
  test3: [{
      aa: 5,
      bb: '6'
    }, {
      cc: [ 'hello', 'world', 7 ]
    }
  ]
}

console.log(JSON.stringify(capitalizeKeys(t)))

(这个函数要适配,因为我只要首字母大写,辅助函数不需要嵌套)

【讨论】:

  • 这看起来是我想要的。
【解决方案4】:
$.each(obj, function(i, parent) {
  $.each(parent, function(key, record) {
    parent[ key.toUpperCase() ] = record[key]; //rename key
    delete parent[key]; //delete old key
  });
});

【讨论】:

  • 请在您的答案中添加解释。仅仅代码行并不构成一个好的答案。
  • 首先迭代数组然后迭代键,在第二个循环内重命名键并删除旧的。
  • 编辑您的问题而不是添加评论。
【解决方案5】:
let obj = [
{ Address1: "dd",Address2: 'qww',BankAccNo: 44,BankBranchCode: 44,BloodGrp: 'A+' },
{ Address1: "dd",Address2: 'qww',BankAccNo: 44,BankBranchCode: 44,BloodGrp: 'A+' }
];

const uppercaseKeys = (elem) => {
  let newObject = {}

  Object.keys(elem).reduce( (acc, key, allKeys) => {
    acc[key.toUpperCase()] = elem[key]
    delete elem[key]
    return acc
  }, elem)

  return newObject
}

obj.forEach( o => uppercaseKeys )
console.log(obj)

【讨论】:

    【解决方案6】:

    您现在还可以将Object.fromEntries()Object.entries() 结合使用 - 请查看Object transformations 部分。

    const obj2 = obj1.map(item => Object.fromEntries(Object.entries(item).map(([key, val]) => [
      key.toUpperCase(),
      val
    ])));
    

    我已经详细说明了以下步骤:

    // Iterate through each item in array
    const obj2 = obj1.map(item => {
      // Object.entries() method returns array of object's own enumerable string-keyed property [key, value] pairs, 
      // in the same order as that provided by a for...in loop
      const entries = Object.entries(item);
    
      // Convert keys to uppercase
      const uppercaseEntries = entries.map(([key, val]) => [
        key.toUpperCase(),
        val
      ]);
    
      // Object.fromEntries() method transforms a list of key-value pairs into an object.
      return Object.fromEntries(uppercaseEntries);
    });`
    

    https://jsfiddle.net/buj5y32x/3/

    【讨论】:

      【解决方案7】:

      要获得更广泛的支持,最好将Object.keys()Array.reduce() 结合使用。

      const obj2 = obj1.map(item =>
        Object.keys(item).reduce((accumulator, key) => {
          // accumulator is the new object we are creating
          accumulator[key.toUpperCase()] = item[key];
          return accumulator;
        }, {})
      );
      

      https://jsfiddle.net/qf81ezsy/

      【讨论】:

        【解决方案8】:

        您可以遍历它们并添加新条目吗?

        for (index in obj) {
          for (key in obj[index]) { 
             obj[index][key.toUpperCase()] = obj[key]; 
          }
        }
        

        【讨论】:

        • 不赞成使用for..in 遍历数组。现在你有两个大写和小写的键,这可能是也可能不是 OP 想要的。
        猜你喜欢
        • 2017-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多