繁体   English   中英

是否有一种惯用的 Javascript 方法可以避免为失败的“Array.find()”提供默认值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM