如何从数组中获取信息到消息中?

Posted

技术标签:

【中文标题】如何从数组中获取信息到消息中?【英文标题】:How do I get Info from an Array into a message? 【发布时间】:2021-05-27 05:39:16 【问题描述】:

我将一些信息存储在这样的数组中:

array = [ name:'name1', id:'id1' ,  name:'name2', id:'id2' ,  name:'name3', id:'id3'];

我想从机器人向用户发送一条消息,其中包含数组中的所有名称。我该怎么做?

通常,我会使用 for 循环来循环进行比较等,但我不想发送多条消息。只是想要一个回应,所以我认为我不应该使用 for 循环。

为了澄清,我希望 Discord 机器人的响应如下所示:

"name1的ID是id1,name2的ID是id2,name3的ID是id3"

数组也可以改变。这就是我意识到我应该让每个人都知道的事情。所以数组开始是空的,然后有随机名称被推送到它。因此,当有人使用正确的命令时,我希望它回复数组中的每个名称,而不管数组的长度如何。

【问题讨论】:

(请注意数组是使用[] 而不是() 是的,您应该在对象列表周围使用[]。要逐个迭代数组的元素,您有多种方法。这是我最喜欢的两个:array.forEach(element => //your code);for (var element of array)//your code 请提供您希望发回姓名的格式?作为新数组中的单个名称,在对象中? 提出这个问题时,() 是一个错误。他们在 [] @Brettski 我希望将它们作为消息发送给不和谐的用户。抱歉,我忘记在我的原始帖子中包含信息 【参考方案1】:

你可以用reduce循环,这样你就可以从数组中返回你想要的任何东西(例如字符串)。

const message = array.reduce((accumulated, currentObj) => 
    return acc + currentObj.name + ', ';
, '');

// 将返回姓名、姓名、姓名

【讨论】:

这看起来很有用,但如果我想单独使用每一个怎么办?例如,如果我希望底部发回“name 的 ID 是 id\nother name 的 ID 是 other id” @Chaimm 的示例在此处使用数组详细信息中的reduce 函数:(developer.mozilla.org/en-US/docs/Web/javascript/Reference/…)。在每次迭代(数组中的元素)中,您可以在将字符串添加到累加器之前按照您想要的方式格式化字符串 (acc)。所以像返回累积 += `$currentObj.name 的 ID 是 $currentObj.id`【参考方案2】:

有多种方法可以做到这一点,是的,它们涉及某种类型的循环。 for 循环通常是最快的,但如果只有几个项目,这无关紧要。还有Array.forEach()MDN和Array.reduce()MDN

使用 forEach:

const array = [name: "name1", id: "id1", name: "name2", id: "id2", name: "name3", id: "id3"]
const itemCount = array.length;
const output = ''

array.forEach(item, idx => 
  output += `$item.name's ID is $item.id$idx < itemCount ? ', ' : ''`


return output

使用减少

const array = [name: "name1", id: "id1", name: "name2", id: "id2", name: "name3", id: "id3"]
const itemCount = array.length;

return array.reduce((acc, item, idx) => 
  acc += `$item.name's ID is $item.id$idx < itemCount ? ', ' : ''`
  return acc;
, '');

for 循环

const array = [name: "name1", id: "id1", name: "name2", id: "id2", name: "name3", id: "id3"]
const output = ''

for (let i = 0; i < array.length; i += 1) 
  const item = array[i];
  output += `$item.name's ID is $item.id$idx < itemCount ? ', ' : ''`


return output;

上面可能有一两个错误,但我希望你能大致了解。 $idx &lt; itemCount ? ', ' : '' 只是在最后一项上不添加逗号的一种混乱方式。

【讨论】:

我从未真正想过使用 for 循环来生成整个消息。不过,以这种方式使用 for 循环更有意义。谢谢 不要小看其他数组迭代器,它们以自己的方式非常强大。我花了一些时间来适应它们,但它们现在非常有用。

以上是关于如何从数组中获取信息到消息中?的主要内容,如果未能解决你的问题,请参考以下文章

如何从Json数组中获取具体信息

如何从 .json 文件 discord.py 中获取信息

C# 转换数组并从对象数组中获取信息

如何从服务中获取更新信息?

如何使用 laravel 和 mysql 数据库获取数组中的数组?

如何将机器人消息发送到一台服务器中的多个通道(阅读正文以获取更多信息)