2018-09-30 23:01:58 +01:00
---
id: 587d7b7b367417b2b2512b13
title: Copy an Array with the Spread Operator
challengeType: 1
2019-08-05 09:17:33 -07:00
forumTopicId: 301157
2018-09-30 23:01:58 +01:00
---
## Description
< section id = 'description' >
While < code > slice()< / code > allows us to be selective about what elements of an array to copy, among several other useful tasks, ES6's new < dfn > spread operator< / dfn > allows us to easily copy < em > all< / em > of an array's elements, in order, with a simple and highly readable syntax. The spread syntax simply looks like this: < code > ...< / code >
In practice, we can use the spread operator to copy an array like so:
2019-04-26 17:21:49 -07:00
2019-05-01 09:33:02 -07:00
```js
2019-04-26 17:21:49 -07:00
let thisArray = [true, true, undefined, false, null];
let thatArray = [...thisArray];
// thatArray equals [true, true, undefined, false, null]
// thisArray remains unchanged, and is identical to thatArray
```
2018-09-30 23:01:58 +01:00
< / section >
## Instructions
< section id = 'instructions' >
We have defined a function, < code > copyMachine< / code > which takes < code > arr< / code > (an array) and < code > num< / code > (a number) as arguments. The function is supposed to return a new array made up of < code > num< / code > copies of < code > arr< / code > . We have done most of the work for you, but it doesn't work quite right yet. Modify the function using spread syntax so that it works correctly (hint: another method we have already covered might come in handy here!).
< / section >
## Tests
< section id = 'tests' >
```yml
2018-10-04 14:37:37 +01:00
tests:
2018-10-20 21:02:47 +03:00
- text: < code > copyMachine([true, false, true], 2)</ code > should return < code > [[true, false, true], [true, false, true]]</ code >
2019-05-01 01:37:27 +02:00
testString: assert.deepEqual(copyMachine([true, false, true], 2), [[true, false, true], [true, false, true]]);
2018-10-20 21:02:47 +03:00
- text: < code > copyMachine([1, 2, 3], 5)</ code > should return < code > [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]</ code >
2019-05-01 01:37:27 +02:00
testString: assert.deepEqual(copyMachine([1, 2, 3], 5), [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]);
2018-10-20 21:02:47 +03:00
- text: < code > copyMachine([true, true, null], 1)</ code > should return < code > [[true, true, null]]</ code >
2019-05-01 01:37:27 +02:00
testString: assert.deepEqual(copyMachine([true, true, null], 1), [[true, true, null]]);
2018-10-20 21:02:47 +03:00
- text: < code > copyMachine(["it works"], 3)</ code > should return < code > [["it works"], ["it works"], ["it works"]]</ code >
2019-05-01 01:37:27 +02:00
testString: assert.deepEqual(copyMachine(['it works'], 3), [['it works'], ['it works'], ['it works']]);
2018-10-04 14:37:37 +01:00
- text: The < code > copyMachine</ code > function should utilize the < code > spread operator</ code > with array < code > arr</ code >
2019-05-01 01:37:27 +02:00
testString: assert(removeJSComments(code).match(/\.\.\.arr/));
2018-09-30 23:01:58 +01:00
```
< / section >
## Challenge Seed
< section id = 'challengeSeed' >
< div id = 'js-seed' >
```js
function copyMachine(arr, num) {
let newArr = [];
while (num >= 1) {
// change code below this line
// change code above this line
num--;
}
return newArr;
}
// change code here to test different cases:
console.log(copyMachine([true, false, true], 2));
```
< / div >
2019-05-01 01:37:27 +02:00
### After Test
< div id = 'js-teardown' >
2018-09-30 23:01:58 +01:00
2019-05-01 01:37:27 +02:00
```js
const removeJSComments = str => str.replace(/\/\*[\s\S]*?\*\/|\/\/.*$/gm, '');
```
< / div >
2018-09-30 23:01:58 +01:00
< / section >
## Solution
< section id = 'solution' >
```js
2019-05-01 01:37:27 +02:00
function copyMachine(arr,num){
let newArr=[];
while(num >=1){
// change code below this line
newArr.push([...arr]);
//change code above this line
num--;
}
return newArr;
}
console.log(copyMachine([true, false, true], 2));
2018-09-30 23:01:58 +01:00
```
2019-07-18 08:24:12 -07:00
2018-09-30 23:01:58 +01:00
< / section >