我正在尝试使用一系列命令来创建列表:!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);
})
}
}
我的问题是,它不是删除数组中的指定元素,而是删除所有元素。我没有收到错误或任何信息,我的列表只是变空了。
答案 0 :(得分:1)
我想通了。
我需要:
.splice(deletedOne)
更改为 .splice(parseInt(args[0]))
(感谢 Lux).splice(parseInt(args[0]), 1)
答案 1 :(得分:0)
我认为 Array.filter
比 Array.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);
});
},
};