我正在FreecodeCamp上学习javascript。而且,解决我的问题对我没有多大帮助。 我们必须过滤保存在const变量中的数组中的整数。
const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2];
const squareList = (arr) => {
"use strict";
const squaredIntegers = arr.filter( (num) => num > 0 && num % parseInt(num) === 0 ).map( (num) => Math.pow(num, 2) );
return squaredIntegers;
};
const squaredIntegers = squareList(realNumberArray);
console.log(squaredIntegers);
我真的无法理解这部分num % parseInt(num) === 0 ).map( (num) => Math.pow(num, 2) );
为什么要使用parseint()方法和Math.pow。有人可以解释我为什么?
谢谢。
答案 0 :(得分:3)
parseInt(num)
给出num的整数部分,例如parseInt(3.14) === 3 //true
。
使用num % parseInt(num)
基本上会在数字及其整数部分之间产生差异。如果不是0
,则数字被舍弃。
Math.pow(num)
给出一个平方数,该平方数将返回到新数组。不过,num * num
在这方面更快,而不必包括模块和调用对象属性。
除此之外,解决方案中的代码非常拥挤,我建议将其分解以提高可读性。似乎它的编写样式加剧了混乱。
答案 1 :(得分:2)
const squaredIntegers = arr.filter( (num) => num > 0 && num % parseInt(num) === 0 ).map( (num) => Math.pow(num, 2) );
return squaredIntegers;
在filter
内,检查num
是否为正(num>0)
和num
为integer
。用于检查整数。 num % parseInt(num)
parseInt将num更改为integer
,并且数字modulus
本身为0,因此条件为num % parseInt(num)==0
。 Math.pow(num,2)
用于对数字取平方。
答案 2 :(得分:0)
许多人都很好地解释了这一点。您也可以做这部分
SearchPer()
就像这样,它应该可以正常工作。希望这会有所帮助。
const squaredIntegers = arr.filter( (num) => num > 0 && num % parseInt(num) === 0 ).map( (num) => Math.pow(num, 2) );
答案 3 :(得分:0)
const squaredIntegers = arr.filter(
(num) => {
if (Number.isInteger(num) && num >0){
return num;
}}
).map((num) => num *num); // Math.pow(num, 2) can also be used here
return squaredIntegers;
};
这可能是解决您问题的简便方法,尽管上述所有解决方案也可以正常工作。 num*num
也可以替换为Math.pow(num, 2)
。
答案 4 :(得分:0)
Try This One 不仅一次过滤掉负数,还只返回整数。
const squareList = arr => {
let myArr = arr
.filter(item => item > 0)
.reduce((a, current) => a.concat(current*current) , [])
.filter(num => Number.isInteger(num));
return myArr;
};
const squaredIntegers = squareList([4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2]);
console.log(squaredIntegers);// Prints : [16, 1764, 36] on console.