.github
api-server
client
config
curriculum
__fixtures__
challenges
_meta
chinese
english
01-responsive-web-design
02-javascript-algorithms-and-data-structures
basic-algorithm-scripting
basic-data-structures
access-an-arrays-contents-using-bracket-notation.md
access-property-names-with-bracket-notation.md
add-items-to-an-array-with-push-and-unshift.md
add-items-using-splice.md
add-key-value-pairs-to-javascript-objects.md
check-for-the-presence-of-an-element-with-indexof.md
check-if-an-object-has-a-property.md
combine-arrays-with-the-spread-operator.md
copy-an-array-with-the-spread-operator.md
copy-array-items-using-slice.md
create-complex-multi-dimensional-arrays.md
generate-an-array-of-all-object-keys-with-object.keys.md
iterate-through-all-an-arrays-items-using-for-loops.md
iterate-through-the-keys-of-an-object-with-a-for...in-statement.md
modify-an-array-stored-in-an-object.md
modify-an-object-nested-within-an-object.md
remove-items-from-an-array-with-pop-and-shift.md
remove-items-using-splice.md
use-an-array-to-store-a-collection-of-data.md
use-the-delete-keyword-to-remove-object-properties.md
basic-javascript
basic-javascript-rpg-game
debugging
es6
functional-programming
functional-programming-spreadsheet
intermediate-algorithm-scripting
intermediate-javascript-calorie-counter
javascript-algorithms-and-data-structures-projects
object-oriented-programming
regular-expressions
03-front-end-libraries
04-data-visualization
05-apis-and-microservices
06-quality-assurance
07-scientific-computing-with-python
08-data-analysis-with-python
09-information-security
10-coding-interview-prep
11-machine-learning-with-python
12-certificates
.markdownlint.yaml
dictionaries
schema
test
.babelrc
LICENSE.md
create-challenge-bundle.js
crowdin.yml
getChallenges.acceptance.test.js
getChallenges.js
getChallenges.test.js
gulpfile.js
lib.js
package-entry.js
package-lock.json
package.json
utils.js
cypress
docs
tools
utils
.editorconfig
.eslintignore
.eslintrc-base.json
.eslintrc.json
.gitattributes
.gitignore
.gitpod.yml
.node-inspectorrc
.npmrc
.prettierignore
.prettierrc
.snyk
.vcmrc
CODE_OF_CONDUCT.md
CONTRIBUTING.md
HoF.md
LICENSE.md
README.md
SECURITY.md
change_volumes_owner.sh
cypress-install.js
cypress.json
jest.config.js
lerna.json
lighthouserc.js
package-lock.json
package.json
sample.env
* feat(tools): add seed/solution restore script * chore(curriculum): remove empty sections' markers * chore(curriculum): add seed + solution to Chinese * chore: remove old formatter * fix: update getChallenges parse translated challenges separately, without reference to the source * chore(curriculum): add dashedName to English * chore(curriculum): add dashedName to Chinese * refactor: remove unused challenge property 'name' * fix: relax dashedName requirement * fix: stray tag Remove stray `pre` tag from challenge file. Signed-off-by: nhcarrigan <nhcarrigan@gmail.com> Co-authored-by: nhcarrigan <nhcarrigan@gmail.com>
83 lines
2.3 KiB
Markdown
83 lines
2.3 KiB
Markdown
---
|
|
id: 587d78b2367417b2b2512b0f
|
|
title: Remove Items from an Array with pop() and shift()
|
|
challengeType: 1
|
|
forumTopicId: 301165
|
|
dashedName: remove-items-from-an-array-with-pop-and-shift
|
|
---
|
|
|
|
# --description--
|
|
|
|
Both `push()` and `unshift()` have corresponding methods that are nearly functional opposites: `pop()` and `shift()`. As you may have guessed by now, instead of adding, `pop()` *removes* an element from the end of an array, while `shift()` removes an element from the beginning. The key difference between `pop()` and `shift()` and their cousins `push()` and `unshift()`, is that neither method takes parameters, and each only allows an array to be modified by a single element at a time.
|
|
|
|
Let's take a look:
|
|
|
|
```js
|
|
let greetings = ['whats up?', 'hello', 'see ya!'];
|
|
|
|
greetings.pop();
|
|
// now equals ['whats up?', 'hello']
|
|
|
|
greetings.shift();
|
|
// now equals ['hello']
|
|
```
|
|
|
|
We can also return the value of the removed element with either method like this:
|
|
|
|
```js
|
|
let popped = greetings.pop();
|
|
// returns 'hello'
|
|
// greetings now equals []
|
|
```
|
|
|
|
# --instructions--
|
|
|
|
We have defined a function, `popShift`, which takes an array as an argument and returns a new array. Modify the function, using `pop()` and `shift()`, to remove the first and last elements of the argument array, and assign the removed elements to their corresponding variables, so that the returned array contains their values.
|
|
|
|
# --hints--
|
|
|
|
`popShift(["challenge", "is", "not", "complete"])` should return `["challenge", "complete"]`
|
|
|
|
```js
|
|
assert.deepEqual(popShift(['challenge', 'is', 'not', 'complete']), [
|
|
'challenge',
|
|
'complete'
|
|
]);
|
|
```
|
|
|
|
The `popShift` function should utilize the `pop()` method
|
|
|
|
```js
|
|
assert.notStrictEqual(popShift.toString().search(/\.pop\(/), -1);
|
|
```
|
|
|
|
The `popShift` function should utilize the `shift()` method
|
|
|
|
```js
|
|
assert.notStrictEqual(popShift.toString().search(/\.shift\(/), -1);
|
|
```
|
|
|
|
# --seed--
|
|
|
|
## --seed-contents--
|
|
|
|
```js
|
|
function popShift(arr) {
|
|
let popped; // Change this line
|
|
let shifted; // Change this line
|
|
return [shifted, popped];
|
|
}
|
|
|
|
console.log(popShift(['challenge', 'is', 'not', 'complete']));
|
|
```
|
|
|
|
# --solutions--
|
|
|
|
```js
|
|
function popShift(arr) {
|
|
let popped = arr.pop(); // Change this line
|
|
let shifted = arr.shift(); // Change this line
|
|
return [shifted, popped];
|
|
}
|
|
```
|