打字稿;关键在于获得价值

时间:2019-12-25 15:34:19

标签: typescript object

我正试图通过它的键从对象中获取一个值,例如:

// 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 })));
}```

1 个答案:

答案 0 :(得分:0)

我的代码有什么问题,从逻辑上讲,这是很多原因:

  • 我尝试使用Object.values()而不是简单地使用“ obj[key]”方式。
  • 我想在字符串中的代码旁使用eval(),以便根据提供的参数执行代码,我通过简单地使用函数对其进行了固定和改进。
  • 我试图使用Object.values()通过键的值来获取值,这是完全错误的。

更新后的代码看起来更好,更有效且更简单。