discord.js Ошибка типа: fn не является функцией

#discord.js

#discord.js

Вопрос:

Я пытаюсь создать массив с идентификаторами каналов, найденных с именами каналов из другого массива, но он возвращает ошибку «Ошибка типа: fn не является функцией». Это соответствующий код.

     var filtered_channel_ids = [];
    filtered_channel_names.forEach(element => filtered_channel_ids.push(client.channels.cache.find(element).id))
    console.log(filtered_channel_ids);
  

Ответ №1:

Collection.prototype.find() требуется функция. Например:

 collection.find((element) => element.name === 'Hello World')
  

Однако element это строка (или, как я полагаю, вы не показали filtered_channel_names массив). Похоже, вы хотите найти канал по его имени, для чего вы можете использовать что-то похожее на функцию выше.

 client.channels.cache.find((c) => c.name === element).id
  

Кроме того, вы можете внести в свой код несколько оптимизаций. Прежде всего, вы можете использовать Array.prototype.reduce() вместо forEach() .

Кроме того, поскольку каналы отображаются по их идентификатору, вы можете использовать findKey() вместо find() для автоматического возврата идентификатора канала.

 // original
var filtered_channel_ids = [];
filtered_channel_names.forEach(element => filtered_channel_ids.push(client.channels.cache.find(element).id))
console.log(filtered_channel_ids);

// new and improved
var filtered_channel_ids = filtered_channel_ids.reduce((acc, name) => 
  acc.push(client.channels.cache.findKey((c) => c.name === name), [])
console.log(filtered_channels_ids)
  

Комментарии:

1. Lol Я случайно пометил это как вики сообщества. Моя ошибка.