JavaScript过滤整数

bprjcwpo  于 2023-11-15  发布在  Java
关注(0)|答案(7)|浏览(128)

我正在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。有人能解释一下为什么吗?
谢谢.

m1m5dgzv

m1m5dgzv1#

parseInt(num)给出num的整数部分,例如parseInt(3.14) === 3 //true。使用num % parseInt(num)基本上给出了数字和其整数部分之间的差异。如果不是0,则数字被抛出。Math.pow(num)给出了平方数,返回到新数组。尽管,num * num在这方面更快,不需要包含模块和调用对象属性。
除此之外,解决方案中的代码非常拥挤,我建议将其分解以提高可读性。似乎编写它的风格增加了混乱。

cld4siwp

cld4siwp2#

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)用于平方num。

tvokkenx

tvokkenx3#

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)

zsohkypk

zsohkypk4#

试试这个,它不仅会过滤掉否定的一次,也只返回那些被否定的。

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.

字符串

wi3ka0sx

wi3ka0sx5#

很多人已经用一种很好的方式解释了这一点。你也可以做这部分

const squaredIntegers = arr.filter( (num) => num > 0 && num % parseInt(num) === 0 ).map( (num) => Math.pow(num, 2) );

字符串
就像这样,它应该能正常工作。希望,这能帮上忙。

const squaredIntegers = arr.filter( (num) => num > 0 && num % 1 === 0 ).map( (num) => num * num );

62o28rlo

62o28rlo6#

使用reduce语句的一种更简单的方法是

const squareList = arr => {
  // Only change code below this line
  let myArr = arr.filter(user => Number.isInteger(user) && user > 0)
               .reduce((sqr,num) => sqr.concat(num*num), []);
  return myArr;
  // Only change code above this line
};

const squaredIntegers = squareList([-3, 4.8, 5, 3, -3.2]);
console.log(squaredIntegers);

字符串
其中Number.iscalled()用于过滤小数,user > 0用于过滤小数中的负值

5gfr0r5j

5gfr0r5j7#

这里有一个更简单的方法来解决你的问题:

const squareList = arr => {
  let squaredNumbers = arr
  .filter(elem => elem > 0 && Number.isInteger(elem))
  .map(elem => elem * elem)
  return squaredNumbers;
};

字符串

相关问题