Optimizing a repetition of heavy operations in JavaScript
In the previous lesson, repeated function calls actually take very little time, and our optimization will not save much. However, everything will be much worse if we call a "heavy" function several times, which is executed for quite a long time.
Let, for example, we have a function that finds divisors of a number:
javascriptfunction getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Obviously, this function is quite "heavy". So it would be a bad idea to write code like this:
javascriptlet num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
It is better, of course, to perform the "heavy" operation once and write the result into a variable, and then use this variable in the right places:
javascriptlet num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Задание 1
Optimize the code below:
javascriptlet num = 1233456789;
if (getSumSquare(num) >= 10 && getSumSquare(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
function getSumSquare(num) {
let digits = String(num).split('');
let sum = 0;
for (let digit of digits) {
sum += digit ** 2;
}
return sum;
}