У меня есть страница, где я получаю значение строки запроса, как следующее:вложенные буквальные объекты и фильтрация по нижнему регистру
?Target=Customers&Sector=Private
может также принимать то же значение, строчные букв, в зависимости от пользователя.
У меня есть следующий объект на моей странице:
var settings = {
Target = { T1: "Customer", T2: "Partner", T3 : "Other" },
Sector = { S1 : "Private", S2 : "Public", S3 : "Other" }
}
мне нужно взять строку запроса и получить имена свойств, таких как T1, T2, S1 и т.д .., как я хочу, чтобы отправить их куда-нибудь остальное.
Моего код, чтобы сделать так выглядит следующим образом:
//Here I am converting all the main settings properties to small letters, in csae the user passes "customer"
var settingskey, keys = Object.keys(settings);
var n = keys.length;
var newSettings = {};
while(n--){
settingskey = keys[n];
newSettings[settingskey.toLowerCase()] = settings[settingskey];
}
//Now I have my new object
var resultArray = ""; // This is the final array where I will fill the values like T1 S1
//get query string
var url = window.location.search;
//get rid of ? character
url = url.substring(1);
//separate each key, value pairs
var keyvalueArray = url.split('&');
//loop through all key value pairs
keyvalueArray.forEach(function(keyvalue){
//get key, ex: Target
var key = keyvalue.split('=')[0];
//get value, ex: Customer
var val = keyvalue.split('=')[1];
console.log(key);
console.log(val);
for(p in newSettings){
if(p == key.toLowerCase())
{
var element = {};
element = newSettings[key.toLowerCase()];
var elementValue, elementValues = Object.values(element);
var newElement = {};
var n = elementValues.length;
newElement.keys = element.keys;
while(n--){
elementValue = elementValues[n];
newElement[n] = elementValue.toLowerCase();
}
for(var prop in newElement){
if(element[prop] == val){
classArray+= "." + prop + ", ";
}
}
break;
}
}
});
resultArray = resultArray.substring(0, resultArray.lastIndexOf(',')).trim();
В принципе, я получает имена свойств в первый раз, как Target и сектор, и преобразование их в строчные буквы, и создание нового объекта. Затем я пытаюсь создать новый объект для каждого с новым «значением», поэтому вместо клиента я хочу клиента.
Есть ли простой и эффективный способ сравнения строки запроса с вложенными буквальными значениями/ключами объекта в небольших буквах? что, если у меня есть другие 3-4 вложенных уровня, это означает больше вложенных циклов.
Я хочу, чтобы, когда я прохожу цель = клиент & сектор = частный
вернуться: "T1 S1" в виде строки
Если я прохожу: Target = Заказчик & сектор = ДРУГОЙ
для возврата: «T1 S3» как строка
Любая идея?
Просьба четко ожидаемый результат, основанный на примере. – trincot
Нет смысла перечислять объект для поиска ключа, когда вы просто можете найти свойство? Отбросьте 'for (p в newSettings), если (p == key.toLowerCase())' и замените его на 'if (key.toLowerCase() в newSettings)' максимум. – Bergi
@trincot Я сделал редактирование в конце сообщения, пожалуйста, проверьте его – Jacky