我有一個網頁,我收到查詢字符串值類似如下:嵌套文字對象和過濾用小寫
?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」 作爲一個字符串
如果我通過:目標=客戶&部門=其他
要返回:「T1 S3」作爲字符串
任何想法?
請提供明確預期的輸出,基於示例。 – trincot
枚舉對象以查找關鍵字沒有意義,只需查找屬性即可?如果(p == key.toLowerCase())'放棄'for(p in newSettings)'並且最多用'if(key.toLowerCase()in newSettings')替換它。 – Bergi
@trincot我在帖子末尾做了一個修改,請檢查一下 – Jacky