Search code examples
javascriptarraysidioms

Is there an idiomatic Javascript way of avoiding providing a default value for a failing `Array.find()`?


I've got working code for creating an object on the fly:

// dummy sources
const departments = [
	{ code: 'DA', title: 'Department A' },
 	{ code: 'DB', title: 'Department B' },
 	{ code: 'DC', title: 'Department C' },
 	{ code: 'DD', title: 'Department D' },
]
    
const reviewers = ['Department A','Pub Lunches','Department C','Department D']
    
const validationObject = {}
    
// actual code
reviewers.forEach( (reviewer, index) => {
	const dept = departments.find( dept => dept.title === reviewer) || { code: reviewer.replace(/[ ]/g, '_').replace(/[/W]/g, '') }
	validationObject[dept.code.toLowerCase()+'_reviewer'] = {blah:'blah'}
})
    					
console.log(validationObject)

It works, but the creating a dummy object just to defeat the error when grabbing the code element of an undefined result (when there's no matching element in departments) looks awkward.

Is there a more idiomatic way of doing this that I'm missing?


Solution

  • In ES6 should be something like this

    const dept = {
        code: reviewer.replace(/[ ]/g, '_').replace(/[/W]/g, ''),
        ...departments.find( dept => dept.title === reviewer) 
    }