Otimização da conversão para array em JavaScript

Nem sempre é necessário dividir uma string em um array para fazer algo com ela. Vamos ver um exemplo. Suponha que temos o seguinte código:

javascriptlet num = 123456789;
let arr = String(num).split('');
let sum = 0;

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

console.log(sum);

Por que dividir em um array é ruim aqui? Porque, primeiro, a divisão em um array consome recursos de CPU, segundo, o array resultante ocupará espaço na memória RAM (e esse espaço será maior do que o espaço ocupado pela própria string).

Afinal, na verdade, com for-of você pode iterar não apenas sobre arrays, mas também sobre strings:

javascriptlet num = 123456789;
let str = String(num);
let sum = 0;

for (let char of str) {
  sum += +char;
}

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

O código a seguir encontra a soma dos dígitos de um número inserido em um input. Otimize o código:

html<input>
javascriptlet input = document.querySelector('input');

input.addEventListener('blur', function() {
  let digits = input.value.split('');
  let sum = 0;
  
  for (let digit of digits) {
    sum += +digit;
  }
  
  console.log(sum);
});
Задание 2

O código a seguir conta a quantidade de letras em uma string. Otimize o código:

javascriptlet str = 'abcaab';
let arr = str.split('');

let i = 0;

for (let elem of arr) {
  if (elem == 'a') {
    i++;
  }
}

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

O código a seguir verifica a presença de um caractere em uma string. Otimize o código:

javascriptlet str = 'abcaab';
let arr = str.split('');

console.log(arr.includes('a'));