Альтернативный способ использовать тернарный без else

Есть ли более чистый способ добиться этого?

const message = `Error message: ${json.email ? json.email[0] : ''}`

Можно сделать (json.email || [''])[0].

Tushar 04.05.2018 13:35

@Alex, извините, я неправильно спросил, но я специально спрашивал об использовании логических операторов JavaScript, не обязательно лучший способ достижения.

Ali Ankarali 04.05.2018 13:38

@Alex отредактировал вопрос.

Ali Ankarali 04.05.2018 13:47

@AliAnkarali, не беспокойтесь, можно спросить об этом здесь :)

Alex 04.05.2018 14:14
Поведение ключевого слова "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) для оценки ваших знаний,...
0
4
125
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы можете использовать ||, как показано ниже

(arr || [''])[0]

Если arr - это ложь, то используется новый массив с пустой строкой в ​​качестве первого элемента. [0] вернет первый элемент массива.

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

Ali Ankarali 04.05.2018 13:37

Меня беспокоит лишь побочный вопрос ... разве это не неправильная идея? Я имею в виду, что если arr определен, но у него нет содержимого, он все равно будет возвращать undefined, как бы игнорируя цель пустой строки.

Lain 04.05.2018 13:45

@Lain True. Но это то, что делает OP. Я предоставил альтернативу коду OP.

Tushar 04.05.2018 13:47

Да, я в курсе. Просто вопрос, может быть, ОП переосмыслил свою идею. Не сказать, что ваш ответ неправильный :-)

Lain 04.05.2018 13:48

@Ali Ankarali: Что ж, интересно, действительно ли вы хотите вернуть undefined, если в массиве нет содержимого (var arr = []; console.info (1, (arr || ['']) [0])) и только пустую строку, если сам массив не определен (var arr = undefined; console.info (1, (arr || ['']) [0])). Я хотел бы иметь либо неопределенную, либо пустую строку в обоих случаях.

Lain 04.05.2018 13:54

Ах, в моем случае, если есть массив, он никогда не бывает пустым. Однако, допустим, это может быть, тогда я хотел бы вернуть пустую строку.

Ali Ankarali 04.05.2018 14:09

На самом деле есть предложение tc39 по этому поводу: необязательная цепочка. После того, как это будет жить, это будет так просто, как

const message = `Error message: ${json?.email?.[0] || ''} ${json?.password?.[0] || ''} ${json?.username?.[0] || ''}`

«Этап 1» означает «похоже, что он находится в процессе обсуждения». Вы можете использовать такой синтаксис с помощью Babel.

В противном случае (без Babel) вам лучше использовать помощник, например _.get из lodash, или написать свою собственную версию. Почему не использовать тернарный оператор? Из-за плохой читабельности.

Вау, выглядит круто, спасибо. Я использую некоторые функции этапа 1, поэтому могу добавить эту.

Ali Ankarali 04.05.2018 13:42

Когда вы используете тернарную операцию, всегда возвращайте значение. Логические операторы следует использовать с осторожностью.

As logical expressions are evaluated from left to right, they are tested for possible "short-circuit" evaluation using the following rules:

  • false && (что-нибудь) оценивается как false из-за короткого замыкания.
  • истина || (что угодно) оценивается как истина в результате короткого замыкания.

Если вы используете lodash, вы можете использовать _.get метод, который позволяет вам указать весь путь вложенных средств доступа к свойствам, и если какое-либо свойство по пути не найдено, оно может дополнительно вернуть значение по умолчанию:

_.get(json, 'password[0]', '');

Итак, ваш пример будет примерно таким:

const message = `Error message: ${_.get(json, 'email[0]', '')} ${_.get(json, 'password[0]', '')} ${_.get(json, 'username[0]', '')}`

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