Optimizarea operațiilor repetate în JavaScript

Deseori, programatorii începători efectuează fără gândire apelarea aceleiași funcții de mai multe ori, consumând resurse.

Să ne uităm la un exemplu. Să presupunem că avem un șir care conține o anumită cale:

javascriptlet path = 'img.png';

Să presupunem că sarcina noastră este să verificăm dacă calea se termină cu extensia .png sau .jpg. Un programator începător ar putea scrie următoarea soluție:

javascriptlet path = 'img.png';

if (path.slice(-4) === '.png' || path.slice(-4) === '.jpg') {
  console.log('+++');
} else {
  console.log('---');
}

Ce nu este în regulă cu această soluție? Problema este că metoda slice este apelată de două ori, făcând același lucru. Acest lucru, desigur, nu este optim.

Pentru optimizare, este necesar să tăiați șirul o singură dată, să înregistrați rezultatul într-o variabilă și apoi să utilizați această variabilă mai departe:

javascriptlet path = 'img.png';
let ext  = path.slice(-4);

if (ext === '.png' || ext === '.jpg') {
  console.log('+++');
} else {
  console.log('---');
}
Задание 1

Optimizați codul de mai jos:

javascriptlet num = 123;

if (String(num)[0] === '1' || String(num)[0] === '2') {
  console.log('+++');
} else {
  console.log('---');
}
Задание 2

Optimizați codul de mai jos:

javascriptlet date = new Date();

if (date.getDay() === 0 || date.getDay() === 6) {
  console.log('weekend');
} else {
  console.log('weekday');
}
Задание 3

Optimizați codul de mai jos:

javascriptlet date = new Date();
let res;

if (date.getFullYear() >= 2020 && date.getFullYear() <= 2030) {
  res = 'year ' + date.getFullYear() + ' fits';
} else {
  res = 'year ' + date.getFullYear() + ' doesn't fit';
}

console.log(res)