在消息中列出一个数组

Listing an array in a message

我想在 discord 消息中列出一个数组。到目前为止,我得到了以下代码:

message.channel.send("Game is starting with " + playerNumber + " Players! \n"
    + memberIDs.forEach(element => ("<@" + element + "> \n")));

memberIDs数组包含特定频道中所有成员的ID,现在我想将频道中的所有成员放入一条消息中。我已经用上面的代码试过了,但它只给我消息:

Game is starting with *playerNumber* Players!
undefined

我真的不明白为什么它是未定义的,因为它还会在控制台日志中或当我使用为每个 memberID 创建的消息进行 forEach 循环时给我 memberID。

console.log 中的数组锁如下所示:

[ '392776445375545355', '849388169614196737' ]

感谢任何帮助。

forEach 不会 return JavaScript 中的任何内容,这意味着 memberIDs.forEach(element => ("<@" + element + "> \n"))) 将始终未定义。

let idString = "";

memberIDs.forEach(element => (idString = idString + "<@" + element + "> \n"))

message.channel.send("Game is starting with " + playerNumber + " Players! \n"
    + idString);

这段代码的作用是在 forEach 循环之外定义一个变量,然后在每次循环运行时向其附加字符串。

简答
forEach() 不是你的朋友;你需要 map()join()

长答案
undefinedforEach() 调用的结果,它没有 return 任何东西。

所以你需要得到一个字符串。

为此,您可以使用 .map(),其中 return 是一个数组;和 .join() 将字符串数组连接成一个字符串。

像这样:

memberIDs.map(element => "<@" + element + ">" ).join('\n');

forEach 遍历数组并且不 return 任何东西。使用 map 代替 join:

message.channel.send("Game is starting with " + playerNumber + " Players! \n"
    + memberIDs.map(element => `<@${element}>`).join('\n')
);

Array#map() returns an array of return values from the callback, while Array#forEach()returnsundefined。使用 .map()

memberIDs.map(m => `<@${m}>`)
.join("\n") // join each element with a newline