Saltar al contenido

¿Acceder a la propiedad de JavaScript sin distinción entre mayúsculas y minúsculas?

Estate atento ya que en este artículo hallarás la respuesta que buscas.

Solución:

Prueba esto:

var myObject =  "mIxeDCaSEKeY": "value" ;

var searchKey = 'mixedCaseKey';
myObject[Object.keys(myObject).find(key => key.toLowerCase() === searchKey.toLowerCase())];

Alternativamente, ya puede proporcionar la clave de búsqueda en minúsculas.

Si lo quieres como función:

/**
  * @param Object object
  * @param string key
  * @return any value
 */
function getParameterCaseInsensitive(object, key) 
  return object[Object.keys(object)
    .find(k => k.toLowerCase() === key.toLowerCase())
  ];

Si no se puede encontrar el objeto, volverá sin definir, como de costumbre.

Si necesita admitir navegadores más antiguos, puede usar filter en lugar de:

function getParameterCaseInsensitive(object, key) 
  return object[Object.keys(object).filter(function(k) 
    return k.toLowerCase() === key.toLowerCase();
  )[0]];

Sugiero usar polyfills para Object.keys() y Array.filter () si necesita soporte aún más antiguo.

Compara todas las propiedades de obj con prop.

var objSetter = function(prop,val)
  prop = (prop + "").toLowerCase();
  for(var p in obj)
     if(obj.hasOwnProperty(p) && prop == (p+ "").toLowerCase())
           obj[p] = val;
           break;
      
   

Para esto, prefiero usar el prototipo en lugar de una función independiente solo por facilidad de uso y expresividad. Simplemente no me gusta canalizar objetos en funciones si no es necesario.

Además, aunque la respuesta aceptada funciona, quería una solución más completa tanto para la obtención como para la configuración que se comportara lo más posible como la notación nativa de puntos o la notación entre corchetes.

Con eso en mente, creé un par de funciones de prototipo para configurar / obtener una propiedad de objeto sin tener en cuenta el caso. Tienes que recordar ser MUY responsable al agregar al prototipo de Objeto. Especialmente cuando se usa JQuery y otras bibliotecas. Object.defineProperty () con enumerable establecido en false se utilizó específicamente para evitar conflictos con JQuery. Tampoco me molesté en nombrar las funciones con algo que indique que no distinguen entre mayúsculas y minúsculas, pero ciertamente podrías hacerlo. Me gustan los nombres más cortos.

Aquí está el captador:

Object.defineProperty(Object.prototype, "getProp", 
    value: function (prop) 
        var key,self = this;
        for (key in self) 
            if (key.toLowerCase() == prop.toLowerCase()) 
                return self[key];
            
        
    ,
    //this keeps jquery happy
    enumerable: false
);

Aquí está el colocador:

Object.defineProperty(Object.prototype, "setProp", 
    value: function (prop, val) 
        var key,self = this;
        var found = false;
        if (Object.keys(self).length > 0) 
            for (key in self) 
                if (key.toLowerCase() == prop.toLowerCase()) 
                    //set existing property
                    found = true;                        
                    self[key] = val;
                    break;
                
            
        

        if (!found) 
            //if the property was not found, create it
            self[prop] = val;
          

        return val;
    ,
    //this keeps jquery happy
    enumerable: false
);

Ahora que hemos creado esas funciones, nuestro código es súper limpio y conciso y simplemente funciona.

Obtención que no distingue entre mayúsculas y minúsculas:

var obj = foo: 'bar', camelCase: 'humpy'

obj.getProp("FOO");          //returns 'bar'
obj.getProp("fOO");          //returns 'bar'
obj.getProp("CAMELCASE");    //returns 'humpy' 
obj.getProp("CamelCase");    //returns 'humpy'

Configuración que no distingue entre mayúsculas y minúsculas:

var obj = foo: 'bar', camelCase: 'humpy'

obj.setProp('CAmelCasE', 'super humpy');     //sets prop 'camelCase' to 'super humpy'
obj.setProp('newProp', 'newval');      //creates prop 'newProp' and sets val to 'newval'  
obj.setProp('NewProp', 'anotherval');  //sets prop 'newProp' to 'anotherval'

Si tienes alguna vacilación y forma de acrecentar nuestro enunciado te insinuamos añadir una crónica y con placer lo leeremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *