Skip to content
Permalink
Browse files

fix(curriculum): Rewrote the Write Higher-Order Arrow Functions chall…

…enge and moved to Functional Programming section (#35954)

* fix: reworded and moved challenge

* fix: removed extra line

Co-Authored-By: RandellDawson <5313213+RandellDawson@users.noreply.github.com>

* fix; removed extra line

Co-Authored-By: RandellDawson <5313213+RandellDawson@users.noreply.github.com>

* fix: reworded sentence

Co-Authored-By: RandellDawson <5313213+RandellDawson@users.noreply.github.com>
  • Loading branch information...
RandellDawson authored and moT01 committed May 15, 2019
1 parent d390b40 commit 4b4762716c54aa809a2e02cf0e98d902de5f1296
@@ -36,10 +36,6 @@
"587d7b88367417b2b2512b44",
"Write Arrow Functions with Parameters"
],
[
"587d7b88367417b2b2512b45",
"Write Higher Order Arrow Functions"
],
[
"587d7b88367417b2b2512b46",
"Set Default Parameters for Your Functions"
@@ -68,6 +68,10 @@
"587d7da9367417b2b2512b68",
"Use the reduce Method to Analyze Data"
],
[
"587d7b88367417b2b2512b45",
"Use Higher-Order Functions map, filter, or reduce to Solve a Complex Problem"
],
[
"587d7da9367417b2b2512b69",
"Sort an Array Alphabetically using the sort Method"

This file was deleted.

Oops, something went wrong.
@@ -0,0 +1,82 @@
---
id: 587d7b88367417b2b2512b45
title: Use Higher-Order Functions map, filter, or reduce to Solve a Complex Problem
challengeType: 1
---

## Description
<section id='description'>
Now that you have worked through a few challenges using higher-order functions like <code>map()</code>, <code>filter()</code>, and <code>reduce()</code>, you now get to apply them to solve a more complex challenge.
</section>

## Instructions
<section id='instructions'>
We have defined a function named <code>squareList</code>. You need to complete the code for the <code>squareList</code> function using any combination of <code>map()</code>, <code>filter()</code>, and <code>reduce()</code> so that it returns a new array containing only the square of <em>only</em> the positive integers (decimal numbers are not integers) when an array of real numbers is passed to it. An example of an array containing only real numbers is <code>[-3, 4.8, 5, 3, -3.2]</code>.
<strong>Note:</strong> Your function should not use any kind of <code>for</code> or <code>while</code> loops or the <code>forEach()</code> function.
</section>

## Tests
<section id='tests'>

```yml
tests:
- text: <code>squareList</code> should be a <code>function</code>.
testString: assert.typeOf(squareList, 'function'), '<code>squareList</code> should be a <code>function</code>';
- text: for or while loops or forEach should not be used.
testString: assert(!removeJSComments(code).match(/for|while|forEach/g));
- text: <code>map</code>, <code>filter</code>, or <code>reduce</code> should be used.
testString: assert(removeJSComments(code).match(/\.(map|filter|reduce)\s*\(/g));
- text: The function should return an <code>array</code>.
testString: assert(Array.isArray(squareList([4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2])));
- text: <code>squareList([4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2])</code> should return <code>[16, 1764, 36]</code>.
testString: assert.deepStrictEqual(squareList([4, 5.6, -9.8, 3.14, 42, 6, 8.34, -2]), [16, 1764, 36]);
- text: <code>squareList([-3.7, -5, 3, 10, 12.5, 7, -4.5, -17, 0.3])</code> should return <code>[9, 100, 49]</code>.
testString: assert.deepStrictEqual(squareList([-3.7, -5, 3, 10, 12.5, 7, -4.5, -17, 0.3]), [9, 100, 49]);
```

</section>

## Challenge Seed
<section id='challengeSeed'>

<div id='js-seed'>

```js
const squareList = (arr) => {
// only change code below this line
return arr;
// only change code above this line
};
// test your code
const squaredIntegers = squareList([-3, 4.8, 5, 3, -3.2]);
console.log(squaredIntegers);
```

</div>

<div id='js-teardown'>

```js
const removeJSComments = str => str.replace(/\/\*[\s\S]*?\*\/|\/\/.*$/gm, '');
```

</div>

</section>

## Solution
<section id='solution'>

```js
const squareList = (arr) => {
const positiveIntegers = arr.filter(num => {
return num >= 0 && Number.isInteger(num);
});
const squaredIntegers = positiveIntegers.map(num => {
return num ** 2;
});
return squaredIntegers;
};
```
</section>
@@ -1,5 +1,5 @@
---
title: Write Higher Order Arrow Functions
title: Use Higher-Order Functions map, filter, or reduce to Solve a Complex Problem
---
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 ":triangular_flag_on_post:") Remember to use <a>**`Read-Search-Ask`**</a> if you get stuck. Try to pair program ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ":busts_in_silhouette:") and write your own code ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":pencil:")

@@ -32,35 +32,26 @@ We need to compute and square values from the `realNumberArray` and store them i
**Solution ahead!**

## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":beginner:") Code solution:
```javascript
const squareList = (arr) => {
"use strict";
const squaredIntegers = arr.filter((num) => num > 0 && num % parseInt(num) === 0).map((num) => Math.pow(num, 2));
return squaredIntegers;
};
// test your code
const squaredIntegers = squareList(realNumberArray);
console.log(squaredIntegers);
```js
const squareList = (arr) => arr
.filter((num) => num > 0 && num % parseInt(num) === 0)
.map((num) => Math.pow(num, 2));
```
- [Run code at codepen.io](https://codepen.io/dylantyates/pen/WyWoYJ)

### Code explanation:

Uses the operator `filter()` and `map()` functions to square all positive integers in a given array.


## Alternative code solution:
```javascript
// change code below this line
const squaredIntegers = arr.filter((param) => Number.isInteger(param) && param >= 0).map(x => x * x);
// change code above this line
```js
const squareList = (arr) => {
return arr.reduce((sqrIntegers, num) => {
return Number.isInteger(num) && num > 0
? sqrIntegers.concat(num * num)
: sqrIntegers;
}, []);
};
```
- [Run code at repl.it](https://repl.it/@AdrianSkar/ES6-Write-higher-order-arrow-functions)
### Code explanation
This does basically the same but uses the `isInteger()` method to check the numbers.


### Resources

0 comments on commit 4b47627

Please sign in to comment.
You can’t perform that action at this time.