Итак, вот мой текущий код для валютной системы. Этот код работает для добавления новой информации о пользователе. Очевидно, что это будет продолжать добавлять людей, которые уже есть в нем.
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.
Разве это невозможно? Мне не нравится настраивать его с помощью первого способа, потому что я хотел бы иметь доступ к валюте каждого, если необходимо добавить или убрать, без необходимости делать это по одному человеку за раз.
Похоже, вам, вероятно, нужна структура данных, которая является объектом, а не массивом, чтобы вы могли иметь произвольные пары ключ-значение - пусть ключ будет 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]
-й элемент массива, а не перебирать все возможные элементы и искать совпадение идентификатора.
Было бы очень легко раздать всем монеты с предметом. for (const obj of Object.values(currency)) obj.coins++
, например
Я думаю, что это должно быть !==
:
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 командой, если это необходимо. Все это будет идти по идентификатору автора, и я не знаю, как перебрать всех, как я мог бы сделать с циклом for