Tell us what’s happening:
I just successfully passed the text on this lesson after days of reading through the forum, googling and checking MDN. Somehow I managed to get to the answer right (or one of the possible answer) without looking at the spoiler in the Hint section. Still, I can’t move on since I don’t think I’m grasping the basics of the lesson.

The solution in the Hint section checks for this condition
&& num % parseInt(num) === 0
while I’m usingNumber.isInteger(num)
. Can someone please explain how the suggested solution works, which one is preferable and why? 
Even though it is not explained in previous lessons, I checked the forum and other websites and I think I now understand what .filter and .map are used for and why they help here. However, the test is checking that either filter, map or reduce are used, and I can’t make it work with reduce. Could someone walk me through a solution with reduce?

How does my function know that
num
is the current value in the array being checked? I found this by accident but I’d like to know how was I supposed to know or infer this. 
This last point, I think, is proof that I’m not really getting the lesson: squaredIntegers is created as a constant inside the squareList function. It is testing that the different values in the provided array are integers and positives before squaring them. But then at “test your code” we assign the same squaredIntegers constant the constant/function squareList with the realNumberArray as value. So this is giving me trouble because (a) I thought constants couldn’t be reassigned and (b) I see this as assigning the product of a function to the product itself.
Sorry for the long post. Anyone willing to chime in for any or all of my concerns above will be more than welcomed.
Thanks in advance,
Your code so far
const realNumberArray = [4, 5.6, 9.8, 3.14, 42, 6, 8.34, 2];
const squareList = (arr) => {
"use strict";
// change code below this line
const squaredIntegers = arr.filter((num) => Number.isInteger(num) && num > 0).map((num) => num * num);
// change code above this line
return squaredIntegers;
};
// test your code
const squaredIntegers = squareList(realNumberArray);
console.log(squaredIntegers);
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36
.
Link to the challenge:
https://learn.freecodecamp.org/javascriptalgorithmsanddatastructures/es6/writehigherorderarrowfunctions/