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

Multiplying digits within a number - excluding zeros

我这里的这个例子中的函数运行良好,除了没有解决数字中可能存在的任何零,所以在执行函数时一切都等于零。

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

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

您收到该错误是因为您试图遍历一个数字。 在迭代之前传入一个字符串或将数字转换为字符串将使它起作用。

与其以这种方式循环,更好且更易读的方法是使用 filter 方法在相乘之前过滤掉字符:

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

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)