Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数字内的数字相乘-不包括零_Javascript_For Loop_Destructuring - Fatal编程技术网

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

Javascript 数字内的数字相乘-不包括零,javascript,for-loop,destructuring,Javascript,For Loop,Destructuring,我从这个例子中得到了一个很好的函数,除了没有处理数字中的任何零,所以在执行这个函数时,一切都等于零 函数digitsmulti(数据){ 设arr=[]; 对于(让我来看看数据){ 如果(数据[i]==0){ arr.push(数据[i]); } } 返回[…data.toString()]reduce((p,v)=>p*v); }; console.log(digistmulti(3025))这将迭代数字中的字符。如果字符不是“0”,则将其添加到数组中。然后将这些值相乘,然后返回该数组

我从这个例子中得到了一个很好的函数,除了没有处理数字中的任何零,所以在执行这个函数时,一切都等于零

函数digitsmulti(数据){
设arr=[];
对于(让我来看看数据){
如果(数据[i]==0){
arr.push(数据[i]);
}
}
返回[…data.toString()]reduce((p,v)=>p*v);
};

console.log(digistmulti(3025))这将迭代数字中的字符。如果字符不是“0”,则将其添加到数组中。然后将这些值相乘,然后返回该数组

函数digitsmulti(数据){
常数arr=[];
for(让字符串数(数据)){
如果(数字!=“0”)
arr.push(数字);
}  
返回arr.reduce((p,v)=>p*v);
};

console.log(digistmulti(3025))您得到该错误是因为您试图迭代一个数字。 在迭代之前传入字符串或将数字转换为字符串将使其工作

与其以这种方式循环,不如使用
filter
方法在相乘之前过滤掉字符:

函数digitsmulti(数据){
返回[…data.toString()].filter(n=>n>'0').reduce((p,v)=>p*v);
};

console.log(digistmulti(3025))
输入
转换为
字符串
,然后
拆分
过滤
零和
减少
相乘
const输入=1203
常量removeZeros=number=>{
const arr=number.toString().split(“”).filter(i=>i!='0')
返回arr.reduce((a,c)=>parseInt(a)*parseInt(c))
}

log(removeZeros(input))
如果我错了,请纠正我,但是任何包含零的数字都应该输出零?因为1203将是1x2x0,也就是0。或者你想特别排除零,这样它就会变成1x2x3=6?@Matt是的,我想排除任何零,这样它就会等于后一个例子。啊,我明白了,它是如何将字符串相加和相乘的?有什么强迫行为吗?为什么不需要将字符串转换回数字呢?是的,JS中有很多隐式转换。在本例中,我将数字转换为字符串,并将其扩展为字符串数组,然后根据字符串比较对其进行过滤。在那之后,我依靠隐式转换在
reduce
内部完成乘法工作。reduce中的第一个参数是
累加器
,该累加器在每次迭代中都会传递上一次迭代的返回值。您还可以为
reduce
提供第二个参数,该参数将用作起始值。我理解需要转换为字符串,但是否不需要转换回数字?进一步的类型转换将在reduce函数中执行。因此,当reduce函数尝试对每个数字执行p*v时,它将尝试“3”*“7”,例如,但在JavaScript中,由于类型转换,这会自动转换为3*7。如果您愿意,它将导致一个数字数组被传递到reduce函数中。这样,reduce函数就不需要像您之前那样执行类型转换了。是的,您完全正确。类型转换是隐式执行的。Word,感谢您的解决方案和解释