[英]Is there an idiomatic Javascript way of avoiding providing a default value for a failing `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
元素时消除错误(当部门中没有匹配元素时)看起来很尴尬。
有没有更惯用的方式来做到这一点,我错过了?
在 ES6 中应该是这样的
const dept = {
code: reviewer.replace(/[ ]/g, '_').replace(/[/W]/g, ''),
...departments.find( dept => dept.title === reviewer)
}
如果您不介意使用 lodash 的外部库get()
将阻止您创建不必要的对象,同时将帮助您进行属性验证:
const { get } = require('lodash')
const backupCode = reviewer.replace(/[ ]/g, '_').replace(/[/W]/g, '').toLowerCase() + '_reviewer';
const key = get(departments.find( dept => dept.title === reviewer), 'code', backupCode)
validationObject[key] = {}
否则你可以使用扩展运算符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.