Умножение цифр в числе - исключая нули - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть функция, взятая из этого примера, которая работает хорошо, за исключением того, что она не обращается к нулям, которые могут быть в числе, поэтому при выполнении функции все равно нулю.

Умножение отдельных цифрв число друг с другом в JavaScript

    function digitsMultip(data) {

      let arr = [];
    
      for (let i of data) {

       if (data[i] === 0) {

         arr.push(data[i]);

       }
     
      }
    
     return [...data.toString()].reduce((p, v) => p * v);

    };
    
console.log(digitsMultip(3025));

Я добавил к нему цикл for, который учитывает ноль и удаляет его, но я здесь что-то делаю не так.

Uncaught TypeError: data is not iterable

ЖЕЛАЕМЫЙ ВЫХОД

3025 => 3 * 2 * 5 = 30

Ответы [ 3 ]

1 голос
/ 28 сентября 2019

Вы получаете эту ошибку, потому что вы пытаетесь перебрать число.Передача строки или преобразование числа в строку перед итерацией заставит его работать.

Вместо того, чтобы зацикливать его таким образом, лучшим и удобочитаемым способом будет использование метода filter для фильтрации символовперед умножением:

    function digitsMultip(data) {
     return [...data.toString()].filter(n => n > '0').reduce((p, v) => p * v);
    };
    
console.log(digitsMultip(3025));
1 голос
/ 28 сентября 2019

Превратите input в string, затем split, filter в нули и reduce умножение

const input = 1203

const removeZeros = number =>{
  const arr = number.toString().split('').filter(i => i !== '0')
  
  return arr.reduce((a,c) => parseInt(a) * parseInt(c))
}
console.log(removeZeros(input))

Версия с одной строкой

const removeZeros = n => [...n.toString()].filter(c => c !== '0').map(x => parseInt(x)).reduce((a,c) => a*c)
1 голос
/ 28 сентября 2019

Это перебирает символы в вашем номере.Если символ не равен «0», он добавляется в массив.Этот массив затем уменьшается путем умножения значений и затем возвращается.

function digitsMultip(data) {

  const arr = [];

  for(let number of String(data)) {
     if (number !== "0")
       arr.push(number);
  }  

  return arr.reduce((p, v) => p * v);
};
    
console.log(digitsMultip(3025));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...