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