首页 > 解决方案 > 是否有一种惯用的 Javascript 方法可以避免为失败的 `Array.find()` 提供默认值?

问题描述

我有用于动态创建对象的工作代码:

// 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)

code它可以工作,但是在抓取未定义结果的元素时(当部门中没有匹配的元素时)创建一个虚拟对象只是为了克服错误看起来很尴尬。

有没有我想念的更惯用的方式来做到这一点?

标签: javascriptarraysidioms

解决方案


在 ES6 中应该是这样的

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

推荐阅读