@R0_none
Человечество такое сумасшедшее ..

№2 Как заменить 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 ?
  • Вопрос задан
  • 150 просмотров
Решения вопроса 2
WblCHA
@WblCHA
const rCount = Array.prototype.reduce.call(str, (acc, letter) => {
    if (rX.includes(letter)) {
      acc.X++;
    } else if (rO.includes(letter)) {
      acc.O++;
    }
    return acc;
  }, { X: 0, O: 0 });


Но, поскольку это явно крестики-нолики, то можно реализовать куда как красивее.
const rCount = Array.prototype.reduce.call(str.toLowerCase(), (acc, letter) => {
    switch(letter) {
      case 'x':
        acc.X++;
        break;
      case 'o':
        acc.O++;
        break;
    }
    return acc;
  }, { X: 0, O: 0 });
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
const { x: countX = 0, o: countO = 0 } = Array
  .from(str.toLowerCase())
  .reduce((acc, n) => (acc[n] = (acc[n] ?? 0) + 1, acc), {});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08 Куратор тега JavaScript
https://developer.mozilla.org/ru/docs/Web/JavaScri... - функция для работы с массивами, тогда как rX, rO - строки. Преобразуй их в массивы и используй reduce, если хочется.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы