Tsükliliste operatsioonide optimeerimine JavaScriptis

Isegi kerge operatsioon, mida korratakse tsüklis korduvalt, võib nõuda palju ressursse.

Vaatame näidet. Olgemel on antud mingi massiiv:

javascriptlet arr = [1, 2, 3, 4, 5, 6];

Leiame selle massiivi elementide keskmise. Selleks tuleb leida elementide summa ja jagada see elementide arvuga. Olgem, et mingi programmeerija on selle ülesande juba lahendanud järgmisel viisil:

javascriptlet avg  = 0;

for (let elem of arr) {
  avg += elem / arr.length;
}

console.log(avg);

Vaatleme sellise lahenduse probleeme. Tehniliselt töötab kood õigesti ja annab õige vastuse. Asi on selles, et matemaatiliselt on õige nii jagada kogu summat elementide arvuga, kui ka jagada iga liidetav elementide arvuga.

Siiski tekib teine ​​probleem. Asi on selles, et me teostame jagamist nii mitu korda, kui palju elemente on meie massiivis. Ja selgub, et teeme palju üleliigseid tehteid, sest jagamise oleks võinud teostada lõpus - ühe korra, jagades kogu leitud summa.

Optimeerime oma koodi:

javascriptlet sum = 0;

for (let elem of arr) {
  sum += elem;
}

let avg = sum / arr.length;
console.log(avg);
Задание 1

Optimeerige järgmist koodi:

javascriptfor (let i = 1900; i <= 2100; i++) {
  let curr = new Date;
  let date = new Date(i, curr.getMonth(), curr.getDate());
  
  if (curr.getDay() === date.getDay()) {
    console.log(date);
  }
}
Задание 2

Optimeerige järgmist koodi:

javascriptlet obj = {a: 10, b: 20, c: 30, d: 40, e: 50};
let sum = 0;
  
for (let key in obj) {
  if (String(obj[key])[0] === '1' || String(obj[key])[0] === '2') {
    sum += obj[key];
  }
}

console.log(sum);