Skip to content Skip to sidebar Skip to footer

In Javascript Can An Object Have Case Insensitive Member Access?

I would like a Javascript class that acts pretty much like an ordinary object in its expando capability but with case insensitive access. So var foo = new MyObject(); foo.Bar = 'B

Solution 1:

You could take a proxy and address the property directly with the lower case value of the key.

var foo = {},
    proxy = new Proxy(foo, {
        get: function(obj, prop) {
            return obj[prop.toLowerCase()];
        },
        set: function(obj, prop, value) {
            obj[prop.toLowerCase()] = value;
        }
    });

proxy.Bar = "Baz";

console.log(proxy.bAR);

Solution 2:

You can do this using a Proxy.

In the proxy, we convert the key that we are searching for to lowercase and the objects keys to lowercase and look for the property in the target.

class MyObject {
  constructor() {
    // Some property that we want to use
    this.bar = 'abc'

    // Return a new proxy
    return new Proxy(this, {
      get: (target, prop) => target[prop.toLowerCase()],
      set: (target, prop, value) => (target[prop.toLowerCase()] = value)
    })
  }
}

var foo = new MyObject()
foo.Bar = "Baz"
console.log(foo.bAR)

Post a Comment for "In Javascript Can An Object Have Case Insensitive Member Access?"