我在这里的示例中使用的函数运行良好,但没有解决数字中可能存在的任何零,因此执行该函数时,所有内容都等于零。
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 :(得分: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
,然后将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)