Javascript Filter целые числа - PullRequest
0 голосов
/ 14 января 2019

Я изучаю JavaScript на FreecodeCamp. И решение моей проблемы не помогает мне больше. Мы должны фильтровать целые числа в массиве, который сохраняется в переменной 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. Кто-то может объяснить мне, почему?

спасибо.

Ответы [ 4 ]

0 голосов
/ 08 августа 2019
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).

0 голосов
/ 14 января 2019
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 изменяет число на integer, а modulus числа с самим собой равно 0, поэтому условие num % parseInt(num)==0. Math.pow(num,2) используется для квадрата числа.

0 голосов
/ 15 января 2019

Многие люди объяснили это очень хорошо. Вы также можете сделать эту часть

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 );
0 голосов
/ 14 января 2019

parseInt(num) дает целую часть числа, например, parseInt(3.14) === 3 //true. Использование num % parseInt(num) в основном дает разницу между числом и его целочисленной частью. Если это не 0, номер выбрасывается. Math.pow(num) дает квадратное число, которое возвращается в новый массив. Тем не менее, num * num быстрее в этом отношении, без необходимости включать модуль и вызывать свойство объекта.

Кроме этого, код очень запутан в решении, и я бы предложил разбить его, чтобы улучшить читабельность. Похоже, стиль, в котором оно написано, добавляет путаницы.

...