Я храню некоторую информацию в таком массиве

array = [{name: "name1", id: "id1"}, {name: "name2", id: "id2"}, {name: "name3", id: "id3"}]

Я хочу отправить сообщение от бота обратно пользователю со всеми именами в массиве. Как мне это сделать?

Обычно я бы использовал цикл for для циклического просмотра сравнений и т.п., но я не хочу отправлять несколько сообщений. Просто хочу, чтобы 1 ответил в ответ, поэтому я не думаю, что должен использовать цикл for.

Для пояснения я бы хотел, чтобы ответ от бота Discord выглядел так:

"ID name1 - id1, ID name2 - id2, ID name3 - id3"

Также может измениться массив. Я понял, что мне, наверное, следует сообщить всем. Таким образом, массив начинается пустым, а затем к нему добавляются случайные имена. Поэтому, когда кто-то использует правильную команду, я хочу, чтобы он отвечал каждым именем в массиве, независимо от длины массива.

1
QuazArxx 24 Фев 2021 в 23:57

2 ответа

Лучший ответ

Есть несколько способов сделать это, и да, они включают какой-то цикл. Цикл for обычно самый быстрый, но если элементов всего несколько, это не имеет значения. Также существует Array.forEach() MDN < / a> и 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;
}, '');

Для цикла

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 < itemCount ? ', ' : ''} - это просто беспорядочный способ не добавлять запятую в последний элемент.

0
Brettski 25 Фев 2021 в 01:08

Вы можете выполнить цикл с помощью reduce, таким образом вы можете вернуть все, что хотите, из массива (например, строку).

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

// вернет имя, имя, имя

0
chaimm 24 Фев 2021 в 21:24