是否有一种惯用的Javascript方法可以避免为失败的“Array.find()”提供默认值?
我已经有了在运行中创建对象的工作代码:是否有一种惯用的Javascript方法可以避免为失败的“Array.find()”提供默认值?,javascript,arrays,idioms,Javascript,Arrays,Idioms,我已经有了在运行中创建对象的工作代码: //伪源 警察部门=[ {代码:'DA',标题:'A部门'}, {代码:'DB',标题:'Department B'}, {代码:'DC',标题:'C部门'}, {代码:'DD',标题:'D部门'}, ] const reviewers=[“A部门”、“酒吧午餐”、“C部门”、“D部门”] 常量validationObject={} //实际代码 审阅者。forEach((审阅者,索引)=>{ const dept=departments.find(de
//伪源
警察部门=[
{代码:'DA',标题:'A部门'},
{代码:'DB',标题:'Department B'},
{代码:'DC',标题:'C部门'},
{代码:'DD',标题:'D部门'},
]
const reviewers=[“A部门”、“酒吧午餐”、“C部门”、“D部门”]
常量validationObject={}
//实际代码
审阅者。forEach((审阅者,索引)=>{
const dept=departments.find(dept=>dept.title===reviewer)|{代码:reviewer.replace(/[]/g,'.')。replace(/[/W]/g,')}
validationObject[dept.code.toLowerCase()+''审阅者']={blah:'blah'}
})
ES6中的console.log(validationObject)
应该是这样的
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()+'.'u reviewer';
const key=get(departments.find(dept=>dept.title==reviewer),'code',backupCode)
validationObject[key]={}
否则,您可以使用扩展运算符。我认为您的代码看起来不错。您可以为此功能准备一些函数(伪代码和
dept.code.toLowerCase()+“\u reviewer”
,这会让它更华丽。但总体思路是可以的。在您的问题中,我不清楚的是-您的代码为不在部门的审阅者提供了一个替代值,这将导致类似于Pub\u午餐
,但您的问题是,您创建虚拟对象只是为了排除错误。要保留该发布午餐项目还是忽略它?如果是后者,则向validationObject添加内容的位应包装在If(dept&&dept.code){/*etc*/}
中,如果我不添加{code:'Pub\u午餐}
对象生成,然后下一行中的dept.code
计算失败。我想为所有传入元素创建一个属性,但要缩短我已经知道的项目的名称。哦!是的,看起来确实更好-并且避免了“伊斯坦布尔”工具的覆盖问题