#javascript #node.js #arrays #discord.js
Вопрос:
я хочу удалить аргумент, который я предварительно добавил в массив с помощью команды, кода, который я сделал:
const args = message.content.slice(prefix.length).split(/ /);
const command = args.shift().toLowerCase();
const multipleArgs = args.slice(1).join(" ");
const banWordAdded = new Discord.MessageEmbed()
.setColor('#42f59b')
.setTitle("Ban word added:")
.setFooter(multipleArgs)
const banWordRemoved = new Discord.MessageEmbed()
.setColor('#42f59b')
.setTitle("Ban word removed:")
.setFooter(multipleArgs)
if (banWords.some(word => message.content.toLowerCase().includes(word))) {
message.delete()
message.channel.send("Don't say that!");
} else if (command === 'banword') {
if (!message.member.hasPermission("ADMINISTRATOR")) return message.channel.send("You can't use this command")
if (!args[0]) return message.channel.send("Choose either add or remove")
if (args[0] == 'add')
banWords.push(multipleArgs)
message.channel.send(banWordAdded)
console.log("Array updated");
} else if (args[0] == 'remove') {
delete banWords(multipleArgs)
message.channel.send(banWordRemoved)
console.log("Array updated")
Это прекрасно работает при добавлении запрещенного слова, но когда я хочу его удалить, бот удаляет командное сообщение, содержащее запрещенное слово, вместо того, чтобы удалять его из массива запрещенных слов, как я делаю в примере с удалением запрещенного слова q!, и сообщение удаляется
Ответ №1:
delete
используется для удаления Object properties
, поэтому он не будет работать с массивами. Вы можете использовать Array.prototype.splice()
или Array filter()
метод для достижения этой цели.
Способ 1 .соединение()
const indexOfWord = banWords.indexOf(multipleArgs); // finding the element in the arr
if (indexOfWord == -1) return message.channel.send('word not found'); // if word isn't already in the array return
banWords.splice(indexOfWord, 1); // removing the word
// first parameter is the index of the element to remove, second one is the number of elements to remove.
Способ 2 .фильтр()
const filteredArr = banWords.filter(x => x != multipleArgs); // filteredArr won't contain the words provided
Я считаю, что сращивание было бы идеальным для вас, так как оно не создает новый массив, а изменяет существующий массив. надеюсь, это помогло
Комментарии:
1. @TomTheItalianBBQ np 😀