【问题标题】:Javascript Filter integersJavascript过滤整数
【发布时间】:2019-01-14 11:43:11
【问题描述】:

我正在 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。谁能解释一下为什么?

谢谢。

【问题讨论】:

  • 第一个基本上是整数检查。如果num 是整数,则numparseInt(num) 相等,因此num % num === 0 第二个平方num。更好的方法是在这里使用num => num * num 顺便说一句。
  • 这里使用了两种方法。第一个是filter( (num) => num > 0 && num % parseInt(num) === 0 )。它过滤一个数组并返回一个数字大于 0 的数组。第二个 map( (num) => Math.pow(num, 2) ) 在第一个之后得到一个返回的数组,并返回一个数组,其中包含前一个数组的每个元素但平方。

标签: javascript parseint


【解决方案1】:

parseInt(num) 给出 num 的整数部分,例如,parseInt(3.14) === 3 //true。 使用num % parseInt(num) 基本上给出了数字与其整数部分之间的差异。如果不是0,则丢弃该号码。 Math.pow(num) 给出一个平方数,将其返回到新数组。不过,num * num 在这方面更快,不必包含模块并调用对象属性。

除此之外,解决方案中的代码非常拥挤,我建议将其分解以提高可读性。似乎它的写作风格增加了混乱。

【讨论】:

    【解决方案2】:

    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.
    

    【讨论】:

      【解决方案3】:
      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】:
        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)==0Math.pow(num,2) 用于平方数。

        【讨论】:

          【解决方案5】:

          很多人都很好地解释了这一点。这部分你也可以做

          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 );
          

          【讨论】:

            猜你喜欢
            • 2019-01-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-03-21
            • 1970-01-01
            相关资源
            最近更新 更多