数字内的数字相乘-不包括零

时间:2019-09-27 22:17:47

标签: javascript for-loop destructuring

我在这里的示例中使用的函数运行良好,但没有解决数字中可能存在的任何零,因此执行该函数时,所有内容都等于零。

Multiplying individual digits in a number with each other in 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 个答案:

答案 0 :(得分:1)

这将遍历您电话号码中的字符。如果字符不是“ 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));

答案 1 :(得分:1)

您收到该错误,因为您尝试遍历一个数字。 在迭代之前传入字符串或将数字转换为字符串将使其正常工作。

与其以这种方式循环,不如以一种更好的可读方式,是使用filter方法在乘法之前滤除字符:

    function digitsMultip(data) {
     return [...data.toString()].filter(n => n > '0').reduce((p, v) => p * v);
    };
    
console.log(digitsMultip(3025));

答案 2 :(得分:1)

input变成string,然后将splitfilter的零和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)