Javascript 使用ignorecase在对象中查找键

Javascript 使用ignorecase在对象中查找键,javascript,Javascript,我想在不区分大小写的对象中找到键 对象非常大,因此我无法修改该对象以使所有键都使用小写/大写 比如说 我有var\u列={…} 现在我需要找出它是否存在Id密钥。 目前我正在使用if-else来解决这个问题 if (this._columns['Id']) { this._idColumnName = 'Id'; } else if (this._columns['id']) { this._idColumnName = 'id'; } else if (this._column

我想在不区分大小写的对象中找到键

对象非常大,因此我无法修改该对象以使所有键都使用小写/大写

比如说

我有
var\u列={…}
现在我需要找出它是否存在Id密钥。 目前我正在使用if-else来解决这个问题

if (this._columns['Id']) {
    this._idColumnName = 'Id';
} else if (this._columns['id']) {
    this._idColumnName = 'id';
} else if (this._columns['ID']) {
    this._idColumnName = 'ID';
}
有没有任何方法可以通过使用JavaScript中的任何模式或任何其他方式来检查密钥的存在。

使用:

函数包含skey(对象、键){
return!!Object.keys(Object.find)(k=>k.toLowerCase()==key.toLowerCase());
}
//范例
设o={
Id:“001”
};
console.log(containsKey(o,'ID'));//打印正确
console.log(containsKey(o,'id'));//打印正确

console.log(containsKey(o,'Id'));//由于
Array.prototype.find()
Array.prototype.findIndex()
仍然有一些有限的支持(主要是在移动浏览器上),我不得不想出一个跨浏览器的解决方案,所以我最初写这篇文章是为了检查
findIndex()
函数的存在性:

函数findObjKey(find,obj){
var keys=Object.keys(obj);
if(typeof keys.findIndex=='function'){
var f=keys.findIndex(函数(e){
if(this.toLowerCase()==e.toLowerCase()){return true;}
},找到);
如果(~f){返回键[f];}
}否则{
对于(变量i=0;i
然而,我发现循环遍历每个键实际上比使用
findIndex()
更快

findIndex():0.258056640625ms

Object.keys循环:0.19384765625ms

因此,我提出了这个方法,它适用于任何支持
Object.keys
的浏览器,也适用于对象或数组:

function findKey(find, obj) {
  if (obj.constructor === Object) { obj = Object.keys(obj); }
  for (var i = 0; i < obj.length; i++) {
    if (find.toLowerCase() === obj[i].toLowerCase()) { return obj[i]; }
  }
  return false;
}
函数findKey(find,obj){
如果(obj.constructor==Object){obj=Object.keys(obj);}
对于(变量i=0;i
@Pavan Tiwari,下次请分享您的尝试?(找到的代码或参考链接)如果对象具有键idid,该怎么办?这是一个很好的解决方案。问题的措辞有点不清楚,但从OP的代码中,他们可能希望返回属性名而不是布尔值-如果是这样,显然这只是对代码的一个小调整。@nnnnnn谢谢。更新了我的答案。