【问题标题】:Loop 100 array elements at a time?一次循环 100 个数组元素?
【发布时间】:2021-06-29 01:18:14
【问题描述】:

我有一个 commandArray.json 文件,其中包含 300 多个命令+图像链接,格式为 commandArray[name][response]

我使用下面的代码向用户显示命令名称,但似乎我已经达到了单个聊天消息中 2000 个字符的不和谐限制。 所以我正在考虑一次发送大约 100 个命令名称。

你能帮我实现某种循环来实现这一点吗?

代码先将名称拆分,将json对象转成字符串,然后按字母排序,加入字符串发送消息。

我只需要数100个名字然后发送消息,然后再数再发送等等。

const commandArray = require("./commandArray.json");

if (message.content === '!commands') {
  var addedCommands = commandArray.map(x => `\`${x.name}\``).join(", ")
    var stringArray = addedCommands.split(',');
      var arrangedString = stringArray.sort().join(", ");
        message.channel.send(arrangedString);

}

【问题讨论】:

  • 请不要通过破坏您的帖子为他人工作。您注册 Stack Exchange 时的部分协议是允许 Stack Exchange 继续分发您的帖子(这意味着不允许这样的破坏行为)。

标签: javascript for-loop discord.js


【解决方案1】:
const chunkSize = 100, chunks = [];
for (let i = 0; i < Math.ceil(commandArray.length / chunkSize); i++) {
  chunks[i] = commandArray.slice(i*chunkSize, (i+1)*chunkSize);
}

然后只需在chunks 上操作而不是上面的commandArray,将每个块作为自己的消息发送,例如for (chunk of chunks) ... send(chunk.map().sort().join())。此外,您不需要第一个 .join() 后跟 .split(),这在这里几乎什么都不做。

试试这个:

// outside your message handler...

const commandArray = require("./commandArray.json");
commandArray.sort((a, b) => a.name > b.name ? 1 : 0);

const chunkSize = 100, chunks = [];
for (let i = 0; i < Math.ceil(commandArray.length / chunkSize); i++) {
  chunks[i] = commandArray.slice(i*chunkSize, (i+1)*chunkSize);
}

// inside your message handler function...

if (message.content === '!commands') {
  for (chunk of chunks) {
    message.channel.send(chunk.map(x => `\`${x.name}\``).join(', '));
  }
}

【讨论】:

  • chunks 不是语言功能;只是我给变量的一个适当的名称。您只需要在最后将数组作为字符串,您可以在将其发送到不和谐之前加入它。我将编辑我的答案以使其更适合您的代码。
【解决方案2】:

lodash 有一个名为 chunk 的实用程序

创建一个元素数组,按照大小的长度分成组。如果数组不能被平均分割,最后的块将是剩余的元素。

import chunk from "lodash.chunk";
const commandArray = require("./commandArray.json");


if (message.content === "!commands") {
  const chunked = chunk(commandArray.sort(), 100);
  chunked.forEach((c, i) => {
    const addedCommands = c.map((x) => `\`${x.name}\``).join(", ");
    message.channel.send(addedCommands);
  });
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多