Reduce or filter + map (v4)

Revision 4 of this benchmark created on


Setup

const users = [];
let activeUserNames = [];

for (let i = 0; i < 10000; i++) {
  const user = {};
  const randInt = Math.round(Math.random() * 10);
  user.name = String.fromCharCode(randInt + 65) + String.fromCharCode(Math.ceil(i / 2));
  user.active = randInt%2 === 0;
  users.push(user)
}

Test runner

Ready to run.

Testing in
TestOps/sec
Reduce
users.reduce((acc, user) => {
	if (user.active) {
		acc.push(user.name)
	}
	return acc;
},activeUserNames);
ready
Reduce Right
users.reduceRight((acc, user) => {
	if (user.active) {
		acc.push(user.name)
	}
	return acc;
},activeUserNames);
ready
forEach
users.forEach((user) => {
	if (user.active) {
		activeUserNames.push(user.name);
	}
})
ready
for - in
for (const user in users) {
	if (users[user]?.active) {
		activeUserNames.push(user.name)
	}
}
ready
for - of
for (const user of users) {
	if (user.active) {
		activeUserNames.push(user.name)
	}
}
ready
filter + map
activeUserNames = users
.filter((user) => user.active)
.map((user) => user.name);
ready
map + filter
activeUserNames = users
.map(user => user.active ? user.name : null)
.filter(u => u);
ready
while
while (users.length) {
	const user = users.pop();
	if (user.active) {
		activeUserNames.push(user.name);
	}
}
ready
for loop
for (let i=users.length-1; i >= 0; i--) {
	if (users[i].active) {
		activeUserNames.push(users[i].name)
	}
}
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.