Code Review Videos > Map, Filter, Reduce

Map, Filter, Reduce

In this exercise there are several small problems that can be solved using map, filter, and reduce.

The challenges should be really easy to solve – if you know the language. The aim is to get hands on with doing regular, routine workflows, rather than learning syntax and solving maths problems.

I’m going to specify the problems as a quasi-Gherkin syntax, intentionally language agnostic. I am aware these are not brilliant examples of Gherkin. Perhaps I should have said Kwasi Gherkin. A UK economy joke there.

For specific implementations, or to follow along, see either the specific language pages, or Github.

Easy Reduce

Scenario: Using reduce to sum numbers
  Given an array of zero elements
  When reduced
  Then the outcome should be zero

  Given an array of one number
  When reduced
  Then the outcome should be that same number

  Given an array of multiple numbers
  When reduced
  Then the outcome should be the sum of all numbers


Scenario: Using reduce to concatenate strings
  Given an array of zero elements
  When reduced
  Then the outcome should be an empty string

  Given an array of one string
  When reduced
  Then the outcome should be that same string

  Given an array of multiple strings
  When reduced
  Then the outcome should be a concatenation of all strings


Scenario: Using reduce to find nothing but the truth
  Given an array of zero elements
  When reduced
  Then the outcome should be false

  Given an array of one boolean
  When reduced
  Then the outcome should be that same boolean

  Given an array of multiple booleans
  When all booleans are truthy
  Then the outcome should be true

  Given an array of multiple booleans
  When all booleans are falsy
  Then the outcome should be false

  Given an array of multiple booleans
  When any value is falsy
  Then the outcome should be falseCode language: PHP (php)

Easy Filter

Scenario: Using filter to find even numbers
  Given an array of zero elements
  When filtered
  Then the outcome should be an empty array

  Given an array of one odd number
  When filtered
  Then the outcome should be an empty array

  Given an array of one even number
  When filtered
  Then the outcome should be equivalent to the original array

  Given an array of multiple numbers
  When filtered
  Then the outcome should be an array of only the even numbers


Scenario: Using filter to remove empty strings, and any string containing the letter A
  Given an array of zero elements
  When filtered
  Then the outcome should be an empty array

  Given an array of one empty string
  When filtered
  Then the outcome should be an empty array

  Given an array of one string with the value "a"
  When filtered
  Then the outcome should be an empty array

  Given an array of one string with the value "b"
  When filtered
  Then the outcome should be an array containing "b"

  Given an array of multiple strings
  When filtered
  Then the outcome should be an array of any non empty elements that do not contain the letter A


Scenario: Using filter to find nothing but the truth
  Given an array of zero elements
  When filtered
  Then the outcome should be an empty array

  Given an array of one boolean with the value "false"
  When filtered
  Then the outcome should be an empty array

  Given an array of one boolean with the value "true"
  When filtered
  Then the outcome should be an array containing "true"

  Given an array of multiple boolean values where all are "false"
  When filtered
  Then the outcome should be an empty array

  Given an array of multiple boolean values where all are "true"
  When filtered
  Then the outcome should be equivalent to the original array

  Given an array of multiple boolean values where there are both "true" and "false" values
  When filtered
  Then the outcome should be only the truthy valuesCode language: PHP (php)

Easy Map

Scenario: Using map to square numbers
  Given an array of zero elements
  When mapped
  Then the outcome should be an empty array

  Given an array of one number
  When mapped
  Then the outcome should be an array with the original number squared

  Given an array of multiple numbers
  When mapped
  Then the outcome should be an array with each original number squared


Scenario: Using map to convert strings to title case
  Given an array of zero elements
  When mapped
  Then the outcome should be an empty array

  Given an array of one empty string
  When mapped
  Then the outcome should be an empty array

  Given an array of one string with the value "a"
  When mapped
  Then the outcome should be an array containing "A"

  Given an array of one string with the value "XYZ AbC"
  When mapped
  Then the outcome should be an array containing "Xyz abc"

  Given an array of multiple strings
  When mapped
  Then the outcome should be an array of where all elements are in "Title case"


Scenario: Using map to stringify boolean values
  Given an array of zero elements
  When mapped
  Then the outcome should be an empty array

  Given an array of one boolean with the value "false"
  When mapped
  Then the outcome should be an array containing the string "false"

  Given an array of one boolean with the value "true"
  When mapped
  Then the outcome should be an array containing the string "true"

  Given an array of multiple boolean values where there are both "true" and "false" values
  When mapped
  Then the outcome should be an array where all boolean values have been stringifiedCode language: PHP (php)

Predicted challenges here may be:

  • The zero element array, and satisfying the type system that the given input is the same type that the function expects
  • Strings vs Chars in some languages
  • Logic for tracking the boolean outcomes

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.