gpt4 book ai didi

javascript - 嵌套文字对象并按小写过滤

转载 作者:行者123 更新时间:2023-11-30 15:39:48 25 4
gpt4 key购买 nike

我有一个页面,我在其中接收如下查询字符串值:

?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 和 sector,并将它们转换为小写字母,然后创建一个新对象。然后我“尝试”为每个具有新“值(value)”的对象创建一个新对象,所以我想要客户而不是客户。

是否有一种简单有效的方法来比较查询字符串与小写字母的嵌套文字对象值/键?如果我有其他 3-4 个嵌套级别怎么办,这意味着更多的嵌套循环。

我想什么时候通过 ?target=customer&sector=private

以字符串形式返回:“T1 S1”

如果我通过:?Target=cuSTomer&sector=oThEr

以字符串形式返回:“T1 S3”

有什么想法吗?

最佳答案

您可以在设置的最深层交换键/值,以便在给定“目标”和“客户”时可以直接找到“T1”。所以交换的设置对象看起来像:

var settings = {
target: { customer: "T1", partner: "T2", other: "T3" },
sector: { private: "S1", public: "S2", other: "S3" }
}

这是一个进行这种交换的函数,然后返回一个翻译数组,您可以将其转换为以空格分隔的字符串:

function getCodes(url, settings) {
var swapped = Object.keys(settings).reduce( function (obj, key) {
obj[key.toLowerCase()] = Object.keys(settings[key]).reduce ( function (obj2, key2) {
obj2[settings[key][key2].toLowerCase()] = key2;
return obj2;
}, {} );
return obj;
}, {} );
return url.toLowerCase().split(/[?&#]/).slice(1).map( function (arg) {
var parts = arg.split('=');
return swapped[parts[0].toLowerCase()][parts[1].toLowerCase()];
} );
}

var url= 'http://www.example.com?Target=Customer&Sector=Private';

var settings = {
Target: { T1: "Customer", T2: "Partner", T3 : "Other" },
Sector: { S1 : "Private", S2 : "Public", S3 : "Other" }
}

var result = getCodes(url, settings).join(' ');

console.log(result);

关于javascript - 嵌套文字对象并按小写过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40984341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com