forEach возвращает большое число вместо индекса

#javascript #loops #discord.js

#javascript #циклы #discord.js

Вопрос:

Я пытаюсь создать бота в discord.js это добавляет роль каждому пользователю. Я сталкиваюсь с проблемой всякий раз, когда пытаюсь утешить.регистрируйте индекс, это дает мне какое-то странное большое число вместо индекса.

 async execute(message) {
    const role = message.guild.roles.cache.find(r => r.name == 'Founder');

    if (!role) return message.channel.send(`**${message.author.username}**, role not found`);

    message.guild.members.cache.filter(m => !m.user.bot).forEach((member, i) => {
        member.roles.add(role);
        console.log(`Role was added to ${member.displayName}`);
        console.log(`${i} users completed`);
    });
    message.channel.send(`**${message.author.username}**, role **${role.name}** was added to all members`);
}
  

Вот как это выглядит в консоли.

Индекс - это странное число

Ответ №1:

Если вы посмотрите на сигнатуру типа cache , вы поймете, что это «Коллекция», которая расширяется Map . Следовательно, forEach метод имеет другую подпись, а именно: forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void; . Большие числа, которые вы получаете, являются ключами карты или идентификаторами discord.

Вы можете преобразовать его в массив, сначала используя .values() , а затем .forEach()

Ответ №2:

На самом деле, вы можете сохранить их все, используя let идентификатор JS как таковой:

 async execute(message) {
    const role = message.guild.roles.cache.find(r => r.name == 'Founder');
    if (!role) return message.channel.send(`**${message.author.username}**, role not found`);
    let amount = 0;
    message.guild.members.cache.filter(m => !m.user.bot).forEach(member => {
        member.roles.add(role);
        console.log(`Role was added to ${member.displayName}`);
        amount = amount   1;
        console.log(`${amount} users completed`);
    });
    message.channel.send(`**${message.author.username}**, role **${role.name}** was added to all members`);
}