首页 > 解决方案 > For循环,即使显示多次,也只删除1个值|| 不和谐.js

问题描述

我正在使用 MYSQL 作为我的命令数据库。我使用了一个 for 循环来查找用户给出的值。
^pet add <rarity> <type> | ^pet add common Black
我花了 7 个小时弄清楚如何让 for 循环然后在昨晚重写它。

我想遍历表列“common”并搜索用户输入的类型。
就像例子一样;如果我想将黑色添加到我的宠物列表中,我只想从表格中删除一个。

我让它在表格中搜索用户想要的类型,但是每次我只想删除一个“黑色”实例时,它要么部分删除它,要么全部删除,要么删除一个“白色”值。
我做了很多测试,我找不到它给我的每个问题的好例子。
图片

我也发现了这个问题,但我相信我已经解决了
if (!rows[0].common.includes(bunPet)) return;
图片

case "common":
let commonCheck = rows[0].common.split(", ");
if (commonCheck.length <= 1) return message.reply('Please get another bun for your Common hold before setting a pet.');

    for (i = 0; i < commonCheck.length; i++) {
        let commonMatch = commonCheck[i].match(bunPet);
        con.query(`SELECT * FROM holds WHERE id = '${message.author.id}'`, (err, rows) => {
            let alreadyRan = rows[0].pets;

            if (alreadyRan === bunPet) {
                return console.log('Already ran')
            } else {
                con.query(`SELECT * FROM bun WHERE id = '${message.author.id}'`, (err, rows) => {
                    if (err) throw err;

                    if (commonMatch) {
                        sql = `UPDATE bun SET common = '${commonCheck.join(", ")}' WHERE id = ${message.author.id}`;
                        con.query(sql);
                        con.query(`SELECT * FROM holds WHERE id = '${message.author.id}'`, (err, rows) => {
                            if (err) throw err;
                                                    
                            sql = `UPDATE holds SET pets = '${bunPet}' WHERE id = '${message.author.id}'`;
                            con.query(sql);
                        });
                        message.reply(`**${bunPet}** is now your current pet!\n**Your last pet has been removed.**`)
                    }
                });
            }
        });
    }
break;

标签: javascriptnode.jsdiscord.js

解决方案


在其他 SO 帖子中进行了更多挖掘并找到了解决方法。
而不是使用 for 循环并搜索整个列表并尝试阻止它在每个值上运行;我可以在拼接函数中使用 indexOf 搜索。

case "common":
    let commonCheck = rows[0].common.split(", ");
    if (commonCheck.length <= 1) return message.reply('Please get another bun for your Common hold before setting a pet.');

    commonCheck.splice(commonCheck.indexOf(bunPet), 1);

    sql = `UPDATE bun SET common = '${commonCheck.join(", ")}' WHERE id = '${message.author.id}'`;
    con.query(sql);

    con.query(`SELECT * FROM holds WHERE id = '${message.author.id}'`, (err, rows) => {
        if (err) throw err;

        sql = `UPDATE holds SET pets = '${bunPet}' WHERE id = '${message.author.id}'`;
        con.query(sql);
        message.reply(`**${bunPet}** is now your current pet!\n**Your last pet has been removed.**`);
    });
break;

推荐阅读