如何使用 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];
}
}
});
}
我有以下逻辑,我传递了一个 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];
}
}
});
}