# Map method not working?

I believe my filter is correct, but my map is not. Can you help guide me to the issue?

Thanks

``````  **Your code so far**
``````
``````
const squareList = arr => {
// Only change code below this line
let positiveNumbers = arr
// get positive whole numbers
.filter(number => number > 0 && number % 1 == 0);
// return squared numbers
.map(number => number * number);

// Only change code above this line
};

const squaredIntegers = squareList([4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2]);
console.log(squaredIntegers);

// return new arr only with square of positive integers without a decimal
``````
``````  **Your browser information:**
``````

User Agent is: `Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36`.

Challenge: Use Higher-Order Functions map, filter, or reduce to Solve a Complex Problem

The function youâ€™ve passed to `map` is fine, as is the one to `filter`. However, youâ€™re not returning anything from the function `squareList`, thereâ€™s no `return` statement anywhere.

Hmm Iâ€™ve tried both replacing `let positiveNumbers = arr` with `return arr` as well as adding `return arr` to the bottom but itâ€™s not working. Iâ€™m supposed to return arr right?

``````
const squareList = arr => {
// Only change code below this line
return arr
// get positive whole numbers
.filter(number => number > 0 && number % 1 == 0);
// square each whole number
.map(number => number * number);
// Only change code above this line
};

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

what do the tests say? what output do you get?

1 Like

You normally have to return values from functions. Like, if you want to return the string"hello", this wonâ€™t work:

``````const returnHello = () => {
let hello = "hello";
}
``````

So yes, you have to return the value the function is supposed to be computing.

But the code is never going to reach `map`. What is at the end of the line with `filter` on it?

2 Likes

@ilenia was getting unexpected token at .map but didnâ€™t realize it was caused by `;` at the end of filter. Thank you for pointing that out @DanCouper

2 Likes

What are you trying to check with this condition?

``````number % 1 == 0
``````

When you divide a number, whether negative or positive, by 1, the remainder is always 0. Since this condition is always true, in effect, your test is

``````number > 0 && true
``````

You already realized that you donâ€™t need that semicolon after filter. You put a semicolon to terminate a statement. So having that semicolon, the system expects to see the next statement. But it sees a period (.map(numberâ€¦), which is a syntax error. The expression

``````arr.filter(...)
``````

returns an array and you apply map to this array, so the correct statement is

``````return arr.filter(...).map(...);
``````
1 Like

Thank you for sharing this.

`%` is actually different than `/`

I was confused when I first saw this as well but itâ€™s actually divisible by 1 not divided by 1. Heres the doc Remainder (%) - JavaScript | MDN

Rightâ€¦ They are asking why you are checking that the number is divisible by 1 because every integer has a remainder of 0 when divided by 1.

Ah I actually did some research when I was trying to find how to remove the decimals and came across this javascript - Check if a number has a decimal place/is a whole number - Stack Overflow

lol for a second I thought I finally knew something someone didnâ€™tâ€¦ But Iâ€™m actually confused nowâ€¦

Ah, youâ€™re using modulus as an integer check. Thatâ€™s what they wanted to know.

It looks like thatâ€™ll work for these test cases. I like `isInteger` a bit better because it wonâ€™t work for `10.0`, but both work this case.

Yeah @JeremyLT is right `Number.isInteger(num)` will do the job

Ah, my mindset was fixated with a typed language. I wasnâ€™t thinking that JavaScript is a untyped language and % can work with any values in JavaScript.

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.