Optimalisering av unødvendige loop-iterasjoner i JavaScript

I følgende kode sjekker en programmerer om det finnes tallet 3 i arrayet:

javascriptlet arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let exists = false;

for (let elem of arr) {
  if (elem === 3) {
    exists = true;
  }
}

console.log(exists);

Hva er galt med løsningen hans? Det ser ut til at det ikke gjøres noen unødvendige operasjoner i loopen. Problemet er imidlertid at etter at det er fastslått at tallet 3 er i arrayet, fortsetter loopen å gå til slutten av arrayet.

Det mest irrasjonelle vil være hvis tallet 3 blir funnet et sted i begynnelsen av arrayet, mens selve arrayet har en lengde på, for eksempel, 1000 elementer. Da vil det bli tusen ubrukelige, unødvendige iterasjoner av loopen! Ikke optimalt.

La oss optimalisere koden ved å stoppe loopen i tide:

javascriptlet arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let exists = false;

for (let elem of arr) {
  if (elem === 3) {
    exists = true;
    break;
  }
}

console.log(exists);
Задание 1

Følgende kode teller hvor mange elementer i arrayet som må legges sammen for at summen skal bli større enn 10. Utfør optimalisering:

javascriptlet arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let sum = 0;
let i = 1;

for (let elem of arr) {
  sum += elem;
  
  if (sum <= 10) {
    i++;
  }
}

console.log(i);
Задание 2

Følgende kode skriver ut partall fra det gitte intervallet. Utfør optimalisering:

javascriptfor (let i = 0; i <= 100; i++) {
  if (i % 2 === 0) {
    console.log(i);
  }
}
Задание 3

Følgende kode skriver ut tall som er delelige med både 2 og 3. Utfør optimalisering:

javascriptfor (let i = 0; i <= 100; i++) {
  if (i % 2 === 0 && i % 3 === 0) {
    console.log(i);
  }
}
Задание 4

Følgende kode søker etter alle fredager 13-ende i inneværende år. Utfør optimalisering:

javascriptfor (let i = 0; i <= 11; i++) {
  let curr = new Date;
  let last = new Date(curr.getFullYear(), i + 1, 0).getDate();
  
  for (let j = 1; j <= last; j++) {
    let date = new Date(curr.getFullYear(), i, j);
    
    if (date.getDate() === 13 && date.getDay() === 5) {
      console.log(date);
    }
  }
}