Files
website/src/content/resources/javascript/iterative-vs-functional.md
T
2019-08-07 10:02:59 -04:00

2.4 KiB

authors, created_at, title
authors created_at title
veksen#1060
2019/07/27 Iterative vs Functional array helpers

-- placeholder --

find

const users = [
  { name: "Joe", age: 25 },
  { name: "John", age: 17 },
  { name: "Jane", age: 16 },
]

Iterative way:

let foundUser = null
users.forEach(user => {
  if (user.name === "John") {
    foundUser = user
  }
})

Functional way:

const foundUser = users.find(user => user.name === "John")

filter

const users = [
  { name: "Joe", age: 25 },
  { name: "John", age: 17 },
  { name: "Jane", age: 16 },
]

Iterative way:

const youngerUsers = []
users.forEach(user => {
  if (user.age < 18) {
    youngerUsers.push(user)
  }
})

Functional way:

const youngerUsers = users.filter(user => user.age < 18)

map

const users = [
  { name: "Joe", age: 25 },
  { name: "John", age: 17 },
  { name: "Jane", age: 16 },
]

Iterative way:

const userNames = []
users.forEach(user => {
  userNames.push(user.name)
})

Functional way:

const userNames = users.map(user => user.name)

reduce

const users = [
  { name: "Joe", age: 25 },
  { name: "John", age: 17 },
  { name: "Jane", age: 16 },
]

Iterative way:

let totalAge = 0
users.forEach(user => {
  totalAge += user.age
})

Functional way:

const totalAge = users.reduce((acc, user) => acc + user.age, 0)

some

const users = [
  { name: "Joe", age: 25 },
  { name: "John", age: 17 },
  { name: "Jane", age: 16 },
]

Iterative way:

let hasYoungUsers = false
for (let i = 0; users.length > i; i++) {
  if (user > 18) {
    hasYoungUsers = true
    break
  }
}

Functional way:

const hasYoungUsers = users.some(user => user.age < 18)

every

const users = [
  { name: "Joe", age: 25 },
  { name: "John", age: 17 },
  { name: "Jane", age: 16 },
]

Iterative way:

let allUsersAreOldEnough = true
for (let i = 0; users.length > i; i++) {
  if (user.age > 18) {
    allUsersAreOldEnough = false
    break
  }
}

Functional way:

const hasYoungUsers = users.every(user => user.age < 18)

includes

const pets = ["cat", "dog", "bat"]

Iterative way:

let found = false
pets.forEach(pet => {
  if (pet === "dog") {
    found = true
  }
})

// or most of the time done with indexOf
pets.indexOf("dogs") > 0

Functional way:

pets.includes("dogs")