Каков самый короткий способ сначала проверить ДЛИННУЮ записанную функцию на наличие допустимого вывода (не null), а затем использовать ее несколько раз

#javascript

#javascript

Вопрос:

Используя vanilla js, я собрал однострочную строку, которая принимает длинную функцию, сначала проверяет, имеет ли она допустимое значение (не null), и если оно имеет допустимое значение, чтобы использовать эту длинную функцию несколько раз сокращенным способом.

Код для этого примерно такой:

 (x => {if (!x) return; x.style.color='brown'; x.style.fontWeight='600';})(document.evaluate('//ul[@class="main-menu"]//li[text()="About"]', document, null, 9).singleNodeValue;);
 

HTML, с которым он может работать, будет примерно таким:

 <ul class="main-menu">
  <li>Home</li>
  <li>About</li>
</ul>
 

Длинный способ сделать это был бы примерно таким:

 var x = document.evaluate('//ul[@class="main-menu"]//li[text()="About"]', document, null, 9).singleNodeValue;
if (x) {
  x.style.color='brown';
  x.style.fontWeight='600';
}
 

Мой окончательный код на самом деле больше похож на это:

 const $e = (xpath) => { return document.evaluate(xpath, document, null, 9).singleNodeValue; }
(x => {if (!x) return; x.style.color='blue'; x.style.fontWeight='900';})($e('//ul[@class="main-menu"]//li[text()="Home"]'));
(x => {if (!x) return; x.style.color='brown'; x.style.fontWeight='600';})($e('//ul[@class="main-menu"]//li[text()="About"]'));
 

Хотя я усердно работал над созданием этих однострочников, я чувствую, что мог бы сделать что-то лучше.
Я оставляю это гуру, чтобы посмотреть, можно ли это улучшить, пожалуйста.
Если нет, я просто использую то, что у меня есть, кажется, это работает…

Требования следующие:

  1. Одна ДЛИННАЯ функция должна быть введена только один РАЗ … предпочтительно Xpath, но любая функция должна работать.
  2. Вывод этой функции должен быть проверен и действителен, прежде чем продолжить. (не false, не null)
  3. Функция LONG может использоваться несколько раз сокращенным способом, если вывод допустим.
  4. Одна строка, если это возможно. Более 80 символов — это «нормально», но не намного больше.
  5. К сожалению, это нужно сделать в ванильном javascript.
  6. Я бы предпочел не объявлять никаких переменных.

Спасибо. Наслаждайтесь. Я с нетерпением жду любых ответов.

Комментарии:

1. Я ничего не знаю ни о вас, ни о вашей истории, так что отнеситесь к этому с недоверием, но настоящим профессиональным программистам все равно, сколько строк занимают их функции (предварительная минимизация). Они заботятся о том, чтобы их функции были понятны и удобны в обслуживании, и могли быть использованы более поздними программистами с легкостью и с минимальным количеством дополнительной документации, насколько это возможно. То, что вы описываете, называется «code golf». На самом деле у нас есть сайт в сети Stack Exchange для этого, Code Golf , но вы должны проверить их справочный центр , прежде чем размещать там.

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

Ответ №1:

Я обнаружил, что необязательная цепочка — лучший способ для меня удовлетворить мои конкретные потребности.

 $e('//ul[@class="main-menu"]//li[text()="Home"]')?.style.color='blue';
 

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