#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 Я случайно пометил это как вики сообщества. Моя ошибка.