Files
.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
schema
test
.babelrc
LICENSE.md
comment-dictionary.js
create-challenge-bundle.js
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.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
crowdin.yml
cypress-install.js
cypress.json
jest.config.js
lerna.json
lighthouserc.js
package-lock.json
package.json
sample.env
freeCodeCamp/curriculum/challenges/english/02-javascript-algorithms-and-data-structures/basic-data-structures/remove-items-from-an-array-with-pop-and-shift.md
2020-09-29 22:09:04 +02:00

2.6 KiB

id, title, challengeType, forumTopicId
id title challengeType forumTopicId
587d78b2367417b2b2512b0f Remove Items from an Array with pop() and shift() 1 301165

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:
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:

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.

Tests

tests:
  - text: <code>popShift(["challenge", "is", "not", "complete"])</code> should return <code>["challenge", "complete"]</code>
    testString: assert.deepEqual(popShift(['challenge', 'is', 'not', 'complete']), ["challenge", "complete"]);
  - text: The <code>popShift</code> function should utilize the <code>pop()</code> method
    testString: assert.notStrictEqual(popShift.toString().search(/\.pop\(/), -1);
  - text: The <code>popShift</code> function should utilize the <code>shift()</code> method
    testString: assert.notStrictEqual(popShift.toString().search(/\.shift\(/), -1);

Challenge Seed

function popShift(arr) {
  let popped; // Change this line
  let shifted; // Change this line
  return [shifted, popped];
}

console.log(popShift(['challenge', 'is', 'not', 'complete']));

Solution

function popShift(arr) {
  let popped = arr.pop(); // Change this line
  let shifted = arr.shift(); // Change this line
  return [shifted, popped];
}