JavaScript-ში ციკლის ზედმეტი გამეორებების ოპტიმიზაცია
შემდეგ კოდში, რაღაც პროგრამისტი ამოწმებს,
არის თუ არა მასივში ნომერი 3:
let 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);
რა არის მის გადაწყვეტაში არასწორი? როგორც ჩანს,
ციკლში არანაირი დამატებითი ოპერაცია არ ხდება. პრობლემა,
თუმცა, ისაა, რომ მას შემდეგ რაც განისაზღვრა,
რომ ნომერი 3 არის მასივში, ციკლი
მაინც გრძელდება მასივის ბოლომდე.
ყველაზე არარაციონალური იქნება, თუ ნომერი 3
მოიძებნება სადღაც მასივის დასაწყისში, თავად მასივი კი
იქნება, ვთქვათ, 1000 ელემენტის სიგრძის.
მიიღება ათასი უსარგებლო დამატებითი გამეორება
ციკლის! არაოპტიმალური.
გავაოპტიმიზიროთ კოდი, დროულად შევაჩეროთ ციკლი:
let 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);
შემდეგი კოდი ითვლის, რამდენი
ელემენტის დამატება სჭირდება მასივს,
რათა ჯამი გახდეს 10-ზე მეტი.
შეასრულეთ ოპტიმიზაცია:
let 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);
შემდეგი კოდი აბეჭდავს ლუწ რიცხვებს მოცემული დიაპაზონიდან. შეასრულეთ ოპტიმიზაცია:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0) {
console.log(i);
}
}
შემდეგი კოდი აბეჭდავს რიცხვებს,
რომლებიც იყოფა ერთდროულად 2-ზე
და 3-ზე. შეასრულეთ ოპტიმიზაცია:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0 && i % 3 === 0) {
console.log(i);
}
}
შემდეგი კოდი ეძებს ყველა პარასკევ
13-ს მიმდინარე წელიწადში.
შეასრულეთ ოპტიმიზაცია:
for (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);
}
}
}