gpt4 book ai didi

javascript - 使用具有正则表达式的 javascript 迭代对象内部的对象

转载 作者:行者123 更新时间:2023-12-03 05:18:23 25 4
gpt4 key购买 nike

我正在使用我拥有的权限名称使用 Regex 创建一些描述,如下:

var privileges = [
"APP_SOMEONE_SRV",
"APP_ANYONE_SRV",
"ADM_AD_XX"
];

var descriptions = {
"NETWORK": {
"GROUP": {
"^APP_(.*)$": {
"^APP_" : "PATH",
"^APP_A05_(.*)" : "$1",
"_SRV" : "ON SERVER"
},
"^A05_(.*)" : "Group $1 at AD",
"^ADM_AD_(.*)": "Administrator $1 at AD",
}
}
}

我正在使用 Chrome 开发者工具 调试代码,并使用 window.console.log 打印一些变量:

privileges.forEach(function(role) {
var base = "NETWORK";
var type = "GROUP";
Object.keys(descriptions).forEach(function(baseReg) {
if (base.match(new RegExp(baseReg))) {
Object.keys(descriptions[baseReg]).forEach(function(typeReg) {
if (type.match(new RegExp(typeReg))) {
Object.keys(descriptions[baseReg][typeReg]).forEach(function(roleReg) {

var reg = RegExp(roleReg);
window.console.log("role: " + role);
window.console.log("roleReg: " + typeof roleReg + " >> " + roleReg);
if (role.match(reg)) {
var suggestDescription = role.replace(reg, descriptions[baseReg][typeReg][roleReg]);
window.console.log("description: " + suggestDescription);
}
if (roleReg == Object.prototype.toString.call(roleReg) === '[object Object]'){
window.console.log(roleReg + " is object");
}
window.console.log("");


});
}
});
}
});
});

在控制台上,我发现“^APP_(.*)$”始终是一个字符串,而它应该是一个对象:

VM107:31 role: APP_SOMEONE_SRV
VM107:32 roleReg: string >> ^APP_(.*)$
VM107:35 description: [object Object]
VM107:40
VM107:31 role: APP_SOMEONE_SRV
VM107:32 roleReg: string >> ^A05_(.*)
VM107:40
VM107:31 role: APP_SOMEONE_SRV
VM107:32 roleReg: string >> ^ADM_AD_(.*)
VM107:40
VM107:31 role: APP_ANYONE_SRV
VM107:32 roleReg: string >> ^APP_(.*)$
VM107:35 description: [object Object]
VM107:40
VM107:31 role: APP_ANYONE_SRV
VM107:32 roleReg: string >> ^A05_(.*)
VM107:40
VM107:31 role: APP_ANYONE_SRV
VM107:32 roleReg: string >> ^ADM_AD_(.*)
VM107:40
VM107:31 role: ADM_AD_XX
VM107:32 roleReg: string >> ^APP_(.*)$
VM107:40
VM107:31 role: ADM_AD_XX
VM107:32 roleReg: string >> ^A05_(.*)
VM107:40
VM107:31 role: ADM_AD_XX
VM107:32 roleReg: string >> ^ADM_AD_(.*)
VM107:35 description: Administrator XX at AD

我已经尝试更改比较以检查实际的 roleReg 是否是一个对象,但它没有改变任何内容。它是否有其他方法来迭代描述,在此之前检查实际的描述是否是一个对象?因为,例如,“^A05_(.*)”不是一个对象

最佳答案

roleReg 是属性值(字符串),这就是原因。 reg 是您使用该值创建的对象,它是一个对象。 ;)

为了澄清 Object.keys(descriptions[baseReg][typeReg]) 正在迭代 descriptions['NETWORK']['GROUP'] ,这将为您提供属性名称(字符串),而不是属性的值。 var reg = RegExp(roleReg); 使用属性 NAME 创建一个正则表达式,即 ^APP_(.*)$

descriptions[baseReg][typeReg][roleReg] 将为您提供您正在寻找的属性对象。

试试这个:

privileges.forEach(function(role) {
var base = "NETWORK";
var type = "GROUP";
Object.keys(descriptions).forEach(function(baseReg) {
if (base.match(new RegExp(baseReg))) {
Object.keys(descriptions[baseReg]).forEach(function(typeReg) {
if (type.match(new RegExp(typeReg))) {
Object.keys(descriptions[baseReg][typeReg]).forEach(function(roleReg) {
var reg = RegExp(roleReg);
var roleRegValue = descriptions[baseReg][typeReg][roleReg];
window.console.log("role: " + role);
window.console.log("roleReg Property: " + typeof roleReg + " >> " + roleReg);
window.console.log("roleReg Value: " + typeof roleRegValue + " >> " + roleRegValue);
if (role.match(reg)) {
var suggestDescription = role.replace(reg, descriptions[baseReg][typeReg][roleReg]);
window.console.log("description: " + suggestDescription);
}
if (roleRegValue == Object.prototype.toString.call(roleRegValue) === '[object Object]'){
window.console.log(roleRegValue + " is object");
}
window.console.log("");


});
}
});
}
});
});

关于javascript - 使用具有正则表达式的 javascript 迭代对象内部的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41507874/

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