Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一种惯用的Javascript方法可以避免为失败的“Array.find()”提供默认值?_Javascript_Arrays_Idioms - Fatal编程技术网

是否有一种惯用的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
计算失败。我想为所有传入元素创建一个属性,但要缩短我已经知道的项目的名称。哦!是的,看起来确实更好-并且避免了“伊斯坦布尔”工具的覆盖问题