如何使用 Javascript 在 HashMap 中根据不区分大小写的键查找值

How to look for values based on case insensitive keys in HashMap using Javascript

我有以下逻辑,我传递了一个 JSON 对象和一个 HashMap :-

export const modifyKeys = (obj: { [x: string]: any; }, myMap: any) => {
    Object.keys(obj).forEach(key => {
        if (myMap !== undefined) {
            if (myMap.has(key)) {
                var fieldName = myMap.get(key);
                //console.log('Field Name::', fieldName);
                obj[fieldName] = obj[key];
                delete obj[key];
                if (typeof obj[fieldName] === "object") {
                    modifyKeys(obj[fieldName], myMap);
                }
            }else{
                delete obj[key];
            }
        }
    });
}

我的地图包含键值,在这个 JSON 对象中,我将查找相应的属性以与键匹配并执行一些操作,例如用 HashMap 的值替换该属性,如果找不到匹配项然后从 JSON 对象中删除该属性本身。但现在的问题是密钥必须区分大小写,因为一些数据会被跳过。我想在比赛中考虑不区分大小写。例如,对于 JSON 这样的对象

{
 firstName: 'Vinod',
 LastName: 'Kumar'
}

并且使用包含键值 FirstName-f_name 的 Map,匹配应该发生并且最终对象应该变成这样

{
 f_name: 'Vinod',
 LastName: 'Kumar'
}

大家有什么建议,谢谢

必须循环遍历 myMap 中的键...但是如果您没有任何唯一区别是大小写的键,则以下内容应该可以工作...基本上只是使用 .toLowerCase();[=11= 创建了规范化键]

export const modifyKeys = (obj: {[x: string]: any;}, myMap: any) => {
  Object.keys(obj).forEach(key => {
    var normalizedKey = key.toLowerCase();
    if (myMap !== undefined) {
      var mapKeys = Object.keys(myMap);
      var keyFound = false;
      for (var index = 0; index < mapKeys.length && !keyFound; index++) {
        var mapKey = mapKeys[index];
        var normalizedMapKey = mapKey.toLowerCase();
        if (normalizedMapKey == normalizedKey) {
          var fieldName = myMap[mapKey];
          obj[fieldName] = obj[key];
          delete obj[key];
          if (typeof obj[fieldName] === 'object') {
            modifyKeys(obj[fieldName], myMap);
          }
          keyFound = true;
        }
      }
      if (!keyFound) {
        delete obj[key];
      }
    }
  });
}