L'exemple ES6 posté par @nilloc est incorrect et se brisera à l'usage.
Voici un exemple concret :
const x = {'first':5,'X-Total-Count':10,'third':20};
console.log(x[Object.keys(x).reduce((result,key)=>{
if (!result) {
return key.match(/x-total-count/i)
} else {
return result;
}
},null)]);
ou mieux encore, il devrait retourner undefined si la clé n'existe pas :
const x = {'first':5,'X-Total-Count':10,'third':20};
console.log(x[Object.keys(x).reduce((result,key)=>{
if (!result) {
return key.match(/x-total-count/i) || undefined
} else {
return result;
}
},undefined)]);
Il faut tenir compte du fait que l'exemple ci-dessus renverra la dernière clé correspondante dans l'objet s'il y a plusieurs clés correspondantes.
Voici un exemple avec le code transformé en fonction :
/**
* @param {Object} object
* @param {string} key
* @return {string||undefined} value || undefined
*/
function getKeyCase(obj,key) {
const re = new RegExp(key,"i");
return Object.keys(obj).reduce((result,key)=>{
if (!result) {
return key.match(re) || undefined
} else {
return result;
}
},undefined);
const x = {'first':5,'X-Total-Count':10,'third':20};
console.log(x[getKeyCase(x,"x-total-count")]);