删除列表命令删除数组中的所有元素

时间:2021-01-28 16:22:14

标签: javascript node.js discord.js

我正在尝试使用一系列命令来创建列表:!addlist、!viewlist 和 !deletelist。

对于列表,我使用的是 JSON 文件:

{
  "listContent": []
}

对于 !deletelist 命令的命令文件:

const Discord = require('discord.js')
const list = require('../list.json')
const fs = require('fs')

module.exports = {
    name: 'deletelist',
    execute(message, args) {
        var rawContent = fs.readFileSync('list.json')
        var content = JSON.parse(rawContent)
        var contentList = content.listContent
        var deletedOne = contentList[parseInt(args[0])]

        content.listContent.splice(deletedOne)

        message.channel.send(`${deletedOne} has been deleted!`)

        fs.writeFile('list.json', JSON.stringify(content), function writeJSON(err) {
            if (err) return console.log(err);
        })
    }
}

我的问题是,它不是删除数组中的指定元素,而是删除所有元素。我没有收到错误或任何信息,我的列表只是变空了。

2 个答案:

答案 0 :(得分:1)

我想通了。

我需要:

  1. .splice(deletedOne) 更改为 .splice(parseInt(args[0]))(感谢 Lux)
  2. 添加多个要替换的元素,因此我需要将其设为 .splice(parseInt(args[0]), 1)

答案 1 :(得分:0)

我认为 Array.filterArray.splice 干净一些。另外,请确保您正在检查参数是否有效:

module.exports = {
  name: 'deletelist',

  execute(message, args) {
    const rawContent = fs.readFileSync('list.json');
    const content = JSON.parse(rawContent);
    const indexToRemove = parseInt(args[0], 10);

    if (!indexToRemove) {
      return message.channel.send(`Not removed, "${args[0]}" is an invalid argument.`);
    }
    
    const deletedOne = content.listContent[indexToRemove];

    content.listContent = content.listContent.filter(
      (_, index) => index !== indexToRemove,
    );

    message.channel.send(`${deletedOne} has been deleted!`);

    fs.writeFile('list.json', JSON.stringify(content), (err) => {
      if (err) return console.log(err);
    });
  },
};
相关问题