@rises

Как посчитать сколько раз цифра повторяется в числе?

Нужно в функции выбрать все числа в которых цифра "1" повторяется дважды
  • Вопрос задан
  • 539 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Есть варианты:

const count1 = [
  num => (('' + num).match(/1/g) || []).length,
  num => num.toString().replace(/[^1]/g, '').length,
  num => `${num}`.split('').filter(d => !~-d).length,
  num => [...String(num)].reduce((s, d) => s + (d == 1), 0),
  num => ''.split.call(num, 1).length - 1,
];

const numbers = [
  23489,
  -11,
  -93481,
  7211231,
  0,
  123.321,
  Infinity,
  NaN,
];

count1.map(f => numbers.filter(n => f(n) === 2)).forEach(n => console.log(n));
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Можно без регулярных выражений, которые под капотом нелегки, старым добрым indexOf() в лоб. Костыль только для двух повторов, но, по идее, быстрее регулярок:

function haz2ones(str) {
    const s = str.toString();
    const search = '1';

    let i = s.indexOf(search);
    if (!~i) return false;

    i = s.indexOf(search, i + 1);
    if (!i) return false;
    if (!!~s.indexOf(search, i + 1)) return false;
    return true;
  }

Тесты
const tests = [
    [1, false],
    [11, true],
    [111, false],
    ['1', false],
    ['11', true],
    ['111', false],
    ['100001', true],
    ['000011', true],
    [12345678901234567890, true],
  ];
  
  return tests.map(e => haz2ones(e[0]) === e[1] ? '+' : '- ' + e[0]);
  // +,+,+,+,+,+,+,+,+
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы