Reduce vs Map vs For (v2)

Revision 2 of this benchmark created on


Setup

const items = [];


for (let i = 0; i < 1_000; i++) {
	items.push({
		id: i,
		type: 'flag'
	})
}

Test runner

Ready to run.

Testing in
TestOps/sec
Reduce (if includes)
items.reduce((result, item) => {
  if (!['flag'].includes(item.type)) {
    return result;
  }

  return {
    ...result,
    [item.id]: item,
  };
}, {});
ready
Map (if includes)
Object.fromEntries(
  items
    .map((item) => {
      if (!['flag'].includes(item.type)) {
        return null;
      }

      return [item.id, item];
    })
    .filter((item) => !!item)
);
ready
For (if includes)
const result = {};

for (const item of items) {
  if (!['flag'].includes(item.type)) {
    continue;
  }

  result[item.id] = item;
}
ready
Reduce (if equals)
items.reduce((result, item) => {
  if (item.type !== 'flag') {
    return result;
  }

  return {
    ...result,
    [item.id]: item,
  };
}, {});
ready
Map (if equals)
Object.fromEntries(
  items
    .map((item) => {
      if (item.type !== 'flag') {
        return null;
      }

      return [item.id, item];
    })
    .filter((item) => !!item)
);
ready
For (if equals)
const result = {};

for (const item of items) {
  if (item.type !== 'flag') {
    continue;
  }

  result[item.id] = item;
}
ready

Revisions

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