Filter Map vs Map Undefined

Benchmark created on


Setup

var arr = Array.from({length: 100}, (_, i) => ({resource: i % 2, methods: Array.from({length: 100}, (_, i) => (i % 3 ? {} : {method: i % 4 ? 'POST' : 'GET', projectId: `project${i}`, scriptId: `script${i}`, version: i % 5 ? undefined : i}))}))
var resource = 1
var method = 'GET'

Test runner

Ready to run.

Testing in
TestOps/sec
Filter Map
arr.filter((r) => r.resource === resource).flatMap(r =>
                r.methods?.filter(m => m.method === method && m.projectId && m.scriptId && m.version !== undefined).map(m =>

                  ({ projectId: m.projectId , scriptId: m.scriptId , scriptVersion: m.version })
                )
              ).find(Boolean)
ready
Map Undefined
arr.map(r => {
                if (r.resource !== resource) return undefined

                return r.methods?.map(m => {
                  if (m.method !== method) return undefined

                  const projectId = m.projectId 
                  const scriptId = m.scriptId 
                  const scriptVersion = m.version
                  if (
                    projectId === undefined ||
                    scriptId === undefined ||
                    scriptVersion === undefined
                  ) {
                    // Probably a deleted object
                    return undefined
                  }

                  return { projectId, scriptId, scriptVersion }
                })
              }).flat().find(Boolean)
ready
Filter Map First
arr.filter((r) => r.resource === resource).map(r =>
                (m =>

                  m && ({ projectId: m.projectId , scriptId: m.scriptId , scriptVersion: m.version })
                )(r.methods?.find(m => m.method === method && m.projectId && m.scriptId && m.version !== undefined))
              ).find(Boolean)
ready

Revisions

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