You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用quick.db删除Discord Bot数组中单条数据而非整个数组的问题

解决quick.db删除数组单个条目而非整个数组的问题

你用db.delete()直接操作数组键的方式,会把整个item_${message.author.id}对应的所有数据删掉,这就是为什么整个数组消失了。要只删除数组里的单个条目,得先取出数组、过滤掉目标元素,再把处理后的数组存回数据库,具体实现如下:

修正后的完整代码

const db = require('quick.db'); // 补上缺失的require引入
const emote = require("../../config/emotes.json");
const { MessageEmbed } = require("discord.js");

module.exports = {
    name: 'delete',
    run: async(client, message, args) => {
        // 获取用户当前的物品数组,没有的话默认空数组
        let userItems = db.get(`item_${message.author.id}`) || [];
        
        // 过滤掉要删除的'ThiefOutfit',得到新数组
        userItems = userItems.filter(item => item !== 'ThiefOutfit');
        
        // 根据新数组状态更新数据库:空数组则删除键,否则存新数组
        if (userItems.length === 0) {
            db.delete(`item_${message.author.id}`);
        } else {
            db.set(`item_${message.author.id}`, userItems);
        }
        
        const embed = new MessageEmbed()
            .setDescription("你已删除盗贼套装"); // 可根据需求改成英文描述
        message.channel.send(embed);
    }
}

核心逻辑说明

  • 获取数组:用db.get()拿到用户的物品数组,加|| []是防止用户还没存过物品时返回null,导致后续filter方法报错
  • 过滤元素:filter()会生成一个不包含目标条目的新数组,相当于精准删除了指定条目
  • 更新数据库:如果过滤后数组为空,直接删除对应的数据库键更合理;如果还有剩余元素,就把新数组存回去覆盖原数据

内容的提问来源于stack exchange,提问作者Levelmafia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:40:10