Можно ли использовать count + 1 в тернарном операторе?

Что я хочу сделать, так это проверить, есть ли элемент в массиве, если он есть, я хочу увеличить счетчик. Компилятор сообщает об ошибке, когда я делаю count++, но не когда я делаю count + 1, и он правильно увеличивается. Это потому, что count++ — это операция, а не выражение, а count+1 — это выражение?

let count = 0;

//not working
count = checkArr(arr) ? count++ : count;

//working
count = checkArr(arr) ? count + 1 : count;

Если это работает, я не понимаю, почему его нельзя использовать: p

Kobe 22.05.2019 15:58

Postfix ++ сначала возвращает старое значение, а затем увеличивает само значение. Если вы измените его на префикс один (например, ++count), он будет работать. Однако нет необходимости изменять количество в тернарном операторе, потому что в результате вы присваиваете ему

Andrey 22.05.2019 15:59
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
2
2
498
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Используйте префиксный оператор. Это потому, что с постфиксом значение увеличивается после его первого чтения. С префиксом вы получите обновленное значение count до того, как оно будет прочитано.

count = checkArr(arr) ? ++count : count;

Должно сработать

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

Ivar 22.05.2019 16:08

Законно использовать тернарный оператор таким образом. Однако я бы поспорил о стиле кода здесь.

count = checkArr(arr) ? count + 1 : count;

В этой строке часть expressionFalse (после :) совершенно бесполезна и ничего не делает, и она нужна только для корректного синтаксиса тернарного оператора.

Для этого случая IMO следующая конструкция более читабельна:

if (checkArr(arr)) {
    ++count;
}

или

if (checkArr(arr)) ++count;
Ответ принят как подходящий

Нет ничего запрещенного, но можно взять на вооружение некоторые хорошие практики.

Смешивание присвоения count =, кондиционирования ?: и приращения поста ++ — это много внутри одной строки.

Всегда ищите самое простое решение при кодировании чего-либо. В твоем случае :

if (checkArr(arr)) {
  count += 1;
}

намного легче понять, чем тернар, который кажется неуместным в этом конкретном контексте.


Существуют существующие инструменты проверки качества кода, такие как sonarqube, eslint...

Они всегда требуют простоты.

Пример о троичных правилах:

Пример о post/pre инкременте:

Они хотят, чтобы кодировщик избегал использования ++/--, потому что некоторых людей это может ввести в заблуждение. Многие люди не знают разницы между ++var и var++, что может привести к ошибкам. Отдайте предпочтение var += 1;.

значение count++ и ++count отличается.

Вкратце:

count = count++ : значение count++ — это значение ДО приращения.

count = ++count : значение ++count — это значение ПОСЛЕ приращения.

let count = 5;
console.log(count++); //return 5
console.log(count); //return 6

let count = 10;
console.log(++count); //return 11
console.log(count); //return 11

Это работает одинаково для count-- и --count

Однако здесь следует отметить одну вещь: в eslint это будет считаться ошибкой, и вместо этого рекомендуется использовать +=1.

Ссылка для справки: https://eslint.org/docs/rules/no-plusplus

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