我正试图通过它的键从对象中获取一个值,例如:
// File where I store my values
export let mess = {
rpc: `if (args[1].toLowerCase() === 'true' || args[1].toLowerCase() === 'on') {
conf_vars.rpc = true;
} else if (args[1].toLowerCase() === 'false' || args[1].toLowerCase() === 'off') {
conf_vars.rpc = false;
}`,
prefix: `Guild.findOne({
guildID: message.guild.id
}, async (err, g) => {
if (err) throw err;
if (!g) await new Guild({
guildID: message.guild.id,
prefix: args[2].toLowerCase()
}).save().then(() => message.channel.send(\`Successfully changed the guild's prefix to \${g.prefix}\`));
else {
g.prefix = args[2].toLowerCase();
await g.save().then(() => message.channel.send(\`Successfully changed the guild's prefix to \${g.prefix}\`));
}
})`
}
现在我想通过键获取这些值;
if (Object.keys(vars).some(v => args[0].toLowerCase() === v.toLowerCase())) {
let newVar = Object.keys(vars).find(v => args[0].toLowerCase() === v.toLowerCase());
let confVar = mess[newVar];
confVar(Server, message, args, (await ConfVars.findOne({ guild: message.guild })));
}
但是我似乎无法理解它的逻辑,现在我已经为此困惑了大约一个小时。
[EDIT]:我已经解决了我的问题,我使用函数而不是字符串和eval()
。
另外,我的confVar
的问题是我没有使用mess[newVar]
,现在已对其进行编辑。
新代码如下:
// File where I store the functions (values)
export let mess = {
rpc: function rpc(Server, message: Message, args: string[], conf_vars) {
if (args[1].toLowerCase() === 'true' || args[1].toLowerCase() === 'on') {
conf_vars.rpc = true;
message.channel.send(`Successfully turned the **rpc** option __on__`);
} else if (args[1].toLowerCase() === 'false' || args[1].toLowerCase() === 'off') {
conf_vars.rpc = false;
message.channel.send(`Successfully turned the **rpc** option __off__`)
} else {
message.channel.send(`Please look at the proper usage of the command!`);
}
},
prefix: function prefix(Server, message: Message, args: string[], conf_vars) {
Server.findOne({
guildID: message.guild.id
}, async (err, g) => {
if (err) throw err;
if (!g) await new Server({
guildID: message.guild.id,
prefix: args[2].toLowerCase()
}).save().then(() => { message.channel.send(`Successfully changed the guild's prefix to ${g.prefix}`) });
else {
g.prefix = args[2].toLowerCase();
await g.save().then(() => { message.channel.send(`Successfully changed the guild's prefix to ${g.prefix}`) });
}
})
}
}
// The file where I use them
if (Object.keys(vars).some(v => args[0].toLowerCase() === v.toLowerCase())) {
let newVar = Object.keys(vars).find(v => args[0].toLowerCase() === v.toLowerCase());
let confVar = mess[newVar];
confVar(Server, message, args, (await ConfVars.findOne({ guild: message.guild })));
}```
答案 0 :(得分:0)
我的代码有什么问题,从逻辑上讲,这是很多原因:
Object.values()
而不是简单地使用“ obj[key]
”方式。eval()
,以便根据提供的参数执行代码,我通过简单地使用函数对其进行了固定和改进。Object.values()
通过键的值来获取值,这是完全错误的。更新后的代码看起来更好,更有效且更简单。