freeCodeCamp/curriculum/challenges/english/02-javascript-algorithms-and-data-structures/es6/use-the-rest-operator-with-function-parameters.english.md
Aditya 9cca21f57f [Fix] Removed unnecessary IIFEs from ES6 challenges (#34538)
* feat: removed IIFE and added solution

* feat: updated challenges seed, test and solution

* style: removed semicolon

* feat: updated seed and solution

* feat: updated challenges seed and solution

* feat: updated test, seed and solution

* fix: added seed code to solution

* fix: removed function and added solution

* fix: removed makeClass function and fixed solution

* style: removed excessive semicolons

* Fixed spacing for note in instructions section

* fix: removed assert messages and used const

* fix: regex fails correctly now
2019-03-25 09:19:34 -05:00

2.2 KiB

id, title, challengeType
id title challengeType
587d7b88367417b2b2512b47 Use the Rest Operator with Function Parameters 1

Description

In order to help us create more flexible functions, ES6 introduces the rest operator for function parameters. With the rest operator, you can create functions that take a variable number of arguments. These arguments are stored in an array that can be accessed later from inside the function. Check out this code:
function howMany(...args) {
  return "You have passed " + args.length + " arguments.";
}
console.log(howMany(0, 1, 2)); // You have passed 3 arguments
console.log(howMany("string", null, [1, 2, 3], { })); // You have passed 4 arguments.
The rest operator eliminates the need to check the args array and allows us to apply map(), filter() and reduce() on the parameters array.

Instructions

Modify the function sum using the rest parameter in such a way that the function sum is able to take any number of arguments and return their sum.

Tests

tests:
  - text: The result of <code>sum(0,1,2)</code> should be 3
    testString: assert(sum(0,1,2) === 3);
  - text: The result of <code>sum(1,2,3,4)</code> should be 10
    testString: assert(sum(1,2,3,4) === 10);
  - text: The result of <code>sum(5)</code> should be 5
    testString: assert(sum(5) === 5);
  - text: The result of <code>sum()</code> should be 0
    testString: assert(sum() === 0);
  - text: The <code>sum</code> function should use the <code>...</code> rest parameter on the <code>args</code> parameter.
    testString: assert(code.replace(/\s/g,'').match(/sum=\(\.\.\.args\)=>/));

Challenge Seed

const sum = (x, y, z) => {
  const args = [ x, y, z ];
  return args.reduce((a, b) => a + b, 0);
}
console.log(sum(1, 2, 3)); // 6

Solution

const sum = (...args) => {
  return args.reduce((a, b) => a + b, 0);
}