在消息中列出一个数组
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()
长答案
undefined
是 forEach()
调用的结果,它没有 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
我想在 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()
长答案
undefined
是 forEach()
调用的结果,它没有 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