Skip to content

Instantly share code, notes, and snippets.

@MartinRosenberg
Last active June 10, 2021 23:19
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MartinRosenberg/aa3639f62cac40ca73dbf965bb0e6890 to your computer and use it in GitHub Desktop.
Save MartinRosenberg/aa3639f62cac40ca73dbf965bb0e6890 to your computer and use it in GitHub Desktop.
// Candidates
const reduceSpread = (users) => {
return users.reduce((acc, user) => {
if (!user.active) {
return { ...acc, [user.id]: user.name }
}
return acc
}, {})
}
const reduceAssign = (users) => {
return users.reduce((acc, user) => {
if (!user.active) {
return Object.assign(acc, { [user.id]: user.name })
}
return acc
}, {})
}
const reduceIndex = (users) => {
return users.reduce((acc, user) => {
if (!user.active) {
acc[user.id] = user.name
}
return acc
}, {})
}
const filterReduceSpread = (users) => {
return users
.filter((user) => !user.active)
.reduce((acc, user) => ({ ...acc, [user.id]: user.name }), {})
}
const filterReduceAssign = (users) => {
return users
.filter((user) => !user.active)
.reduce((acc, user) => Object.assign(acc, { [user.id]: user.name }), {})
}
const filterReduceIndex = (users) => {
return users
.filter((user) => !user.active)
.reduce((acc, user) => {
acc[user.id] = user.name
return acc
}, {})
}
const filterMapReduceSpread = (users) => {
return users
.filter((user) => !user.active)
.map((user) => ({ [user.id]: user.name }))
.reduce((acc, user) => ({ ...acc, ...user }), {})
}
const filterMapReduceAssign = (users) => {
return users
.filter((user) => !user.active)
.map((user) => ({ [user.id]: user.name }))
.reduce((acc, user) => Object.assign(acc, user), {})
}
const filterMapObjectReduceIndex = (users) => {
return users
.filter((user) => !user.active)
.map((user) => ({ [user.id]: user.name }))
.reduce((acc, user) => {
acc[user.id] = user.name
return acc
}, {})
}
const filterMapEntryReduceIndex = (users) => {
return users
.filter((user) => !user.active)
.map((user) => [user.id, user.name])
.reduce((acc, [id, name]) => {
acc[id] = name
return acc
}, {})
}
const filterMapEntries = (users) => {
const entries = users
.filter((user) => !user.active)
.map((user) => [user.id, user.name])
return Object.fromEntries(entries)
}
const whileEntries = (users) => {
const filtered = []
const length = users.length
let idx = -1
while (++idx < length) {
const user = users[idx]
if (!user.active) {
filtered.push([user.id, user.name])
}
}
return Object.fromEntries(filtered)
}
const whileIndex = (users) => {
const acc = {}
const length = users.length
let idx = -1
while (++idx < length) {
const user = users[idx]
if (!user.active) {
acc[user.id] = user.name
}
}
return acc
}
const forOfEntries = (users) => {
const filtered = []
for (const user of users) {
if (!user.active) {
filtered.push([user.id, user.name])
}
}
return Object.fromEntries(filtered)
}
const forOfIndex = (users) => {
const acc = {}
for (const user of users) {
if (!user.active) {
acc[user.id] = user.name
}
}
return acc
}
const forOfIndexDestructuring = (users) => {
const acc = {}
for (const { active, id, name } of users) {
if (!active) {
acc[id] = name
}
}
return acc
}
// Data generation
const getUsers = () =>
[
"Abbie",
"Ben",
"Charlie",
"Danny",
"Ellen",
"Frankie",
"Gerald",
"Harriet",
"Ilene",
"Janet",
"Kenny",
"Lisa",
"Martin",
"Nate",
"Orville",
"Peter",
"Quaid",
"Randy",
"Sally",
"Tom",
"Umberto",
"Vanessa",
"Wendy",
"Xerxes",
"Yolanda",
"Zach",
].map((name) => ({
name,
active: !Math.floor(Math.random() * 2),
id: Math.floor(Math.random() * 1000000),
}))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment