What's the best way (most efficient) to turn all the keys of an object to lower case?

前端 未结 20 2482
野性不改
野性不改 2020-12-04 20:42

I\'ve come up with

function keysToLowerCase (obj) {
  var keys = Object.keys(obj);
  var n = keys.length;
  while (n--) {
    var key = keys[n]; // \"cache\"         


        
相关标签:
20条回答
  • 2020-12-04 21:25

    Consider lowering case just once, storing it in a lowKey var:

    function keysToLowerCase (obj) {
      var keys = Object.keys(obj);
      var n = keys.length;
      var lowKey;
      while (n--) {
        var key = keys[n];
        if (key === (lowKey = key.toLowerCase()))
        continue
    
        obj[lowKey] = obj[key]
        delete obj[key]
    
      }
      return (obj);
    }
    
    0 讨论(0)
  • 2020-12-04 21:27
    var aa = {ID:1,NAME:'Guvaliour'};
    var bb= {};
    var cc = Object.keys(aa);
    cc.forEach(element=>{
     bb[element.toLowerCase()]=aa[element];
    });
    cosole.log(bb)
    
    0 讨论(0)
  • 2020-12-04 21:29

    I used ES6 and TypeScript. toLowerCaseObject function takes an Array as parameter and looking through Object tree recursively and make every node lowercase:

    function toLowerCaseObject(items: any[]) {
            return items.map(x => {
                let lowerCasedObject = {}
                    for (let i in x) {
                        if (x.hasOwnProperty(i)) {
                            lowerCased[i.toLowerCase()] = x[i] instanceof Array ? toLowerCaseObject(x[i]) : x[i];
                        }
                }
                return lowerCasedObject;
            });
        }
    
    0 讨论(0)
  • 2020-12-04 21:29

    Here's my recursive version based on one of the above examples.

    //updated function
    var lowerObjKeys = function(obj) {
      Object.keys(obj).forEach(function(key) {
        var k = key.toLowerCase();
        if (k != key) {
          var v = obj[key]
          obj[k] = v;
          delete obj[key];
    
          if (typeof v == 'object') {
            lowerObjKeys(v);
          }
        }
      });
    
      return obj;
    }
    
    //plumbing
    console = {
      _createConsole: function() {
        var pre = document.createElement('pre');
        pre.setAttribute('id', 'console');
        document.body.insertBefore(pre, document.body.firstChild);
        return pre;
      },
      info: function(message) {
        var pre = document.getElementById("console") || console._createConsole();
        pre.textContent += ['>', message, '\n'].join(' ');
      }
    };
    
    //test case
    console.info(JSON.stringify(lowerObjKeys({
      "StackOverflow": "blah",
      "Test": {
        "LULZ": "MEH"
      }
    }), true));

    Beware, it doesn't track circular references, so you can end up with an infinite loop resulting in stack overflow.

    0 讨论(0)
  • 2020-12-04 21:30

    One-liner (only for top level keys):

    Object.assign(...Object.keys(obj).map(key => ({[key.toLowerCase()]: obj[key]})))
    

    Converts:

    { a: 1, B: 2, C: { Z: 4 } }
    

    To:

    { a: 1, b: 2, c: { Z: 4 } }
    
    0 讨论(0)
  • 2020-12-04 21:36

    ES6 version:

    Object.keys(source)
      .reduce((destination, key) => {
        destination[key.toLowerCase()] = source[key];
        return destination;
      }, {});
    
    0 讨论(0)
提交回复
热议问题