#javascript #node.js #discord #discord.js
#javascript #node.js #Discord #discord.js
Вопрос:
Итак, вот мой текущий код для валютной системы. Этот код работает для добавления новой информации о пользователе. Очевидно, что это будет продолжать добавлять людей, которые уже есть в нем.
if (!currency[message.author.id]) {
currency.push({id: message.author.id, coins: 0});
}
если я изменю его на этот, ничего не произойдет. Кажется, что-то не так с этим сравнением, и я не уверен, что это такое, учитывая, что это сработало для других вещей, которые я использовал.
if (!currency[0].id == message.author.id) {
currency.push({id: message.author.id, coins: 0});
}
Это выглядит правильно для меня, поскольку он получает свойство id первого элемента и проверяет, совпадают ли они. Когда я запускаю код, он просто ничего не делает. Никаких ошибок и ничего в файле json, который я использую для его хранения. Он делает это, когда массив пуст, и делает это, когда у меня там есть свойство id.
Разве это невозможно? Мне не нравится настраивать его с помощью первого способа, потому что я хотел бы иметь доступ к валюте каждого пользователя, если это необходимо для добавления или удаления, без необходимости делать это по одному человеку за раз.
Ответ №1:
Я думаю, что это должно быть !==
:
if (currency[0].id !== message.author.id) {
currency.push({id: message.author.id, coins: 0});
}
или должно быть заключено в скобки:
if (!(currency[0].id == message.author.id)) {
currency.push({id: message.author.id, coins: 0});
}
Комментарии:
1. Я завернул его, и он отлично работает. Большое вам спасибо, я не знаю, почему я этого не понял.
Ответ №2:
Похоже, вам, вероятно, нужна структура данных, представляющая собой объект, а не массив, чтобы вы могли иметь произвольные пары ключ-значение — пусть ключ будет message.author.id
.
const currency = {};
// ...
const { id } = message.author;
if (!currency[id]) {
currency[id] = { id, coins: 0 };
} else {
// this author was already inserted - do something else here, if desired
// current[id].coins = coinChangeAmount; // for example
}
Ваш исходный код звучит так, как будто он неправильно использует массив как объект, и currency[0].id == message.author.id
будет проверять только [0]
й элемент массива, а не перебирать все возможные элементы и искать совпадение идентификаторов.
Комментарии:
1. Видите ли, у меня есть эта настройка для моей системы прокачки, а также для другого события, которое я собирался, но мне не нравится, что я не могу дать всем монеты с 1 командой, если это необходимо. Все это будет проходить по идентификатору автора, и я не знаю способа перебрать все, как я мог бы сделать с циклом for
2. Было бы очень легко раздать всем монеты с каким-нибудь предметом.
for (const obj of Object.values(currency)) obj.coins
, например