Задать вопрос
@Sp1keazyYT

Как лучше оптимизировать и сделать мой код на JavaScript красивее и короче?

Добрый день. Имеется такой кусок кода на javascript:
Price2 = 0;
if (roofpt == null || roofpt == 0) Price2 = 5500;
else if (roofpt !== null || roofpt !== 0 && roofmat == 1) Price2 = 7900;
else if (roofpt !== null || roofpt !== 0 && roofmat == 2) Price2 = 8900;

Посоветуйте пожалуйста и скажите, как лучше оптимизировать и сделать мой код JS короче (выглядит не красиво)?
  • Вопрос задан
  • 195 просмотров
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Если это практическая задача, а не собеседование с глубоко зарытыми подвохами, то так:
if (!roofpt) Price2 = 5500; // null, 0, undefined, false, пустая строка
else if (roofmat == 1) Price2 = 7900; // и так известно, что не пустое
else if (roofmat == 2) Price2 = 8900; // и так известно, что не пустое
else Price2 = 0; // по умолчанию

Если же это из собеседования

В исходном коде есть такая деталь. Приоритет операторов в JS ставит && выше, чем ||. Эти два условия выглядят похоже, имелась в виду, наверное, лишняя перепроверка на null/ноль:
(roofpt  == null || roofpt  == 0) 
(roofpt !== null || roofpt !== 0 && roofmat == 1)


Но сначала &&, потом ||:
A || B && C === A  ||  (B && C)
// и второе условие на деле считается так:
(roofpt !== null || (roofpt !== 0 && roofmat == 1))

Т.е. второе условие выполнится и просто при любом rootpt, неравном null.

Тут же ещё одна деталь. Нестрогое равенство == и строгое неравенство !==. Разжёвывать не буду, чтобы вы провалили собеседование.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@kova1ev
Sp1keazyYT вы бы дали пояснение к коду, что он должен делать. Потому что сейчас он написан так, что при любом ненулевом значении roofpt, значение Price2 будет равно 7900, соответственно второй else if просто бессмыслен.

Поэтому, если именно этот код переписывать, то можно так:
let Price2 = 0;

if (!roofpt) Price2 = 5500;
else Price2 = 7900;


или так
let Price2 = 0;

Price2 = (roofpt) ? 7900 : 5200;
Ответ написан
Комментировать
coderisimo
@coderisimo Куратор тега JavaScript
Можно решить довольно компактно.
вот здесь можно поиграться с ф-цией
песочница

function getPrice() {
    return (
      (!parseInt(roofpt) && 5500) ||
      (roofmat == 1 && 7900) ||
      (roofmat == 2 && 8900) ||  0 ); }
Ответ написан
AleksandrB
@AleksandrB
Совсем недавно вывел "Hello world"
Price2 = 0;
if (roofpt == null || roofpt == 0) Price2 = 5500;
else if (roofpt !== null 
      || roofpt !== 0 
      && roofmat == 1) Price2 = 7900;
else if (roofpt !== null 
      || roofpt !== 0 
      && roofmat == 2) Price2 = 8900;

Если в строке с if более 2-х условий, то рекомендуется разделять их на разные строки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы