консоль выводиться сразу около 10 одинаковых сообщений?
это как бы на работу не влияет, просто интересно в чём причина, лога то указано всего 2.
Жесть ифами наспамил 😳
а как сократить и отрефакторить?
Да я с телефона, неудобно Мб все и норм, не смотрел подробно
Но думаю можно аккуратнее сделать
по идее все твои ифы, связанные с key, можно поменять на это: const keyMap = { ‘÷’: ‘/‘, ‘×’: ‘*’, /** тут описываешь все символы, которые нужно промапить во что-то другое **/ } const key = keyMap[e.target.textContent] ?? e.target.textContent
а еще есть вариант с присваиванием кнопкам аттрибута вроде data-value. Если data-value есть, то берем его. Если нет, то текст контент, чтобы не задубливать для всех цифр это. Либо можно для консистетности прописать вообще всем и использовать только значение дата-аттрибута на контент не особо корректно опираться, потому что при его изменении будет неявно ломаться логика. И если тебе понадобится изменить контент, то тебе придется лезть и менять логику, которая тут вообще не при чем. Выглядит как нарушение SRP
спасибо)) поразмышляю над этим))
простите, я пока что не совсем понимаю как работает данная конструкция, и что такое keyMap
Это просто объект. Ключи объекта - это те символы, которые ты хочешь заменить. Значения - это те символы, НА которые ты хочешь заменить В текст контенте у тебя лежит как раз то, что ты хочешь в определенных случаях заменить. Поэтому ты пробуешь получить значение по этому ключу в объекте. Если в объекте оно есть, то ты получишь свой заменяющий символ. Если нет - undefined Чтобы обработать undefined, после обращения к объекту используется ?? - этот оператор вернёт свой правый операнд, если левый будет null или undefined. Соответственно если мы не найдем нужную замену символу в объекте, то мы вернем изначальный контент - то, что прописано справа от оператора ??
ааа, вот оно что))
Обсуждают сегодня