Как искать значения на основе ключей без учета регистра в HashMap с помощью Javascript

#javascript #json #hashmap

#javascript #json #хэш — карта #hashmap

Вопрос:

У меня есть приведенная ниже логика, в которой я передал объект 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, совпадение должно произойти, и конечный объект должен стать таким

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

Есть какие-нибудь предложения, ребята, спасибо

Ответ №1:

Пришлось перебирать ключи в myMap … но следующее должно сработать, если у вас нет ключей, единственное отличие которых — регистр… В основном просто созданы нормализованные ключи с помощью.toLowerCase();

 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 amp;amp; !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];
      }
    }
  });
}