Почему сравнение свойства с author.id не работает?

Итак, вот мой текущий код для валютной системы. Этот код работает для добавления новой информации о пользователе. Очевидно, что это будет продолжать добавлять людей, которые уже есть в нем.

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.

Разве это невозможно? Мне не нравится настраивать его с помощью первого способа, потому что я хотел бы иметь доступ к валюте каждого, если необходимо добавить или убрать, без необходимости делать это по одному человеку за раз.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
83
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 командой, если это необходимо. Все это будет идти по идентификатору автора, и я не знаю, как перебрать всех, как я мог бы сделать с циклом for

QuazArxx 10.12.2020 04:29

Было бы очень легко раздать всем монеты с предметом. for (const obj of Object.values(currency)) obj.coins++, например

CertainPerformance 10.12.2020 04:30
Ответ принят как подходящий

Я думаю, что это должно быть !==:

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});
}

Я завернул его, и он работает отлично. Большое спасибо, я не знаю, почему я этого не понял.

QuazArxx 10.12.2020 06:30

Другие вопросы по теме