Как я могу сложить все числа 1 из строки? - PullRequest
0 голосов
/ 15 ноября 2018

Мне нужно сложить все числа 1 из строки!

Например: "00110010" = 1 + 1 + 1 = 3 ...

psum получит этот результат, а затемЯ проверю

if(psum >= 3){
  return person;
}

Мне нужно найти способ решить эту проблему в javascript ES6, но я не могу использовать какой-либо цикл for, while или forEach, к сожалению !!!

Не могли бы выпомогите мне?

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

Вам нужно использовать метод redu ().

let input = '00110010'
let array = input.split("").map(x => parseInt(x));

let sum = array.reduce((acc, val) => {
  return acc + val;
});

console.log(sum)
0 голосов
/ 15 ноября 2018

В одном утверждении:

let psum = "00110010".split('').reduce((t, n) => {return t + parseInt(n)}, 0);

console.log(psum);
0 голосов
/ 15 ноября 2018

Обратите внимание, что суммирование чисел 1 сводится к подсчету чисел 1, что по-разному делают следующие решения:

с match

Вы можете использовать регулярное выражение /1/g:

var p = "00110010";
var psum = (p.match(/1/g) || []).length;

console.log(psum);

match возвращает массив подстрок, соответствующих шаблону 1./ просто разделяет это регулярное выражение, а g означает, что должны быть получены все совпадения (глобальные).Длина возвращаемого массива, таким образом, соответствует числу 1 с на входе.Если совпадений нет вообще, то match вернет null, поэтому у него нет свойства .length.Чтобы позаботиться об этом, || [] проверит на это null (что неверно в логическом выражении), и вместо null.

с replace* 1030 будет взято [].* Это аналогичный принцип, но путем сопоставления не-1 символов и удаления их: var p = "00110010"; var psum = p.replace(/[^1]/g, "").length; console.log(psum); [^1] означает: символ, который не равен 1. replace заменит все совпадения вторым аргументом (пустой строкой), который сводится к возврату всех символовкоторые не совпадают.Это похоже на двойной минус: возвращаемые символы, которые не совпадают с , а не 1 .Таким образом, вы получите только 1 с :-) .length будет считать их. С split:

var p = "00110010";
var psum = p.split("1").length - 1;

console.log(psum);

split разбивает строку на массив подстрок, которые не имеют заданной подстроки ("1").Таким образом, даже если «1» вообще отсутствует, вы получаете одну такую ​​подстроку (целую строку).Это означает, что, получая длину, мы должны уменьшить ее на 1, чтобы получить число 1 с.

с рекурсивной функцией:

var p = "00110010";
var count1 = p => p.length && ((p[0] == "1") + count1(p.slice(1)));
var psum = count1(p);

console.log(psum);

Здесь вводится функция count1.Сначала проверяется, является ли данная строка p пустой.Если это так, length равен нулю, и это возвращается.Если не пустой, первый символ сравнивается с 1. Это может быть false или true.Этот результат преобразуется в 0 или 1 соответственно и добавляется к результату рекурсивного вызова.Этот рекурсивный вызов учитывает числа 1 в остальной части ввода (исключая первый символ, в котором уже были подсчитаны 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...