Задать вопрос
@R0_none
ни ноты без банкноты

Как сократить код, заменив for на reduce?

Есть такой код:

const rX = 'xX';
const rO = 'oO';
let rCountX = 0;
let rCountO = 0;

for (let i = 0; i < str.length; i++) {
  if (rX.includes(str[i])) {
    rCountX++;
  } else if (rO.includes(str[i])) {
    rCountO++;
  }
}
rCountX === rCountO ? true : false;

Хочу его укоротить, заменив for на reduce.
Но начинаю тормозить на моменте, а где в редюс разместить rCountX и rCountO?
  • Вопрос задан
  • 247 просмотров
Подписаться 1 Простой 1 комментарий
Решение пользователя 0xD34F К ответам на вопрос (3)
0xD34F
@0xD34F Куратор тега JavaScript
Вот reduce:

const { x: countX = 0, o: countO = 0 } = Array
  .from(str.toLowerCase())
  .reduce((acc, n) => (acc[n] = (acc[n] ?? 0) + 1, acc), {});

А вот ещё короче без reduce'а:

const [ countX, countO ] = [ /x/i, /o/i ].map(n => ~-str.split(n).length);
Ответ написан