如果找到Javascript,则返回,否则设置为未定义

如果找到Javascript,则返回,否则设置为未定义,javascript,Javascript,这是我目前的解决方案 var snap = this.snaps.find((snap) => { if(pos > snap.min && snap.max > pos){ return snap; } }) if(snap !== undefined){ this.scrollTo = snap.down ? snap.max : snap.min; }else{ this.scrollTo = undefin

这是我目前的解决方案

var snap = this.snaps.find((snap) => {
    if(pos > snap.min && snap.max > pos){
        return snap;
    }
})
if(snap !== undefined){
    this.scrollTo = snap.down ? snap.max : snap.min;
}else{
    this.scrollTo = undefined
}
我想实现同样的目标,但没有if-else语句。我试过:

this.scrollTo = this.snaps.find((snap) => {
    if(pos > snap.min && snap.max > pos){
        return snap.down ? snap.max : snap.min;;
    }
})

但是这不起作用。

假设.snaps.find的值为,那么只有从函数返回的布尔值才重要<代码>返回快照
返回true的效果相同。在您的例子中,返回条件的布尔值而不是使用if语句是有意义的。您可以使用不带大括号的箭头函数返回表达式的结果,而不使用
return
,因此
find
调用可以缩短为:

var snap = this.snaps.find( snap => pos > snap.min && snap.max > pos );
您可以使用逻辑
&&
运算符删除另一个if/else<如果代码>&&
为falsy(未定义的
为),则计算为第一个操作数,否则计算为第二个操作数:

this.scrollTo = snap && (snap.down ? snap.max : snap.min);

假设
this.snaps.find
为,则只有从函数返回的布尔值才重要<代码>返回快照
返回true的效果相同。在您的例子中,返回条件的布尔值而不是使用if语句是有意义的。您可以使用不带大括号的箭头函数返回表达式的结果,而不使用
return
,因此
find
调用可以缩短为:

var snap = this.snaps.find( snap => pos > snap.min && snap.max > pos );
您可以使用逻辑
&&
运算符删除另一个if/else<如果代码>&&
为falsy(未定义的
为),则计算为第一个操作数,否则计算为第二个操作数:

this.scrollTo = snap && (snap.down ? snap.max : snap.min);

您如何使用第二个示例将其分配给此。scrollTo?更新的问题,谢谢@Himmators供您参考,我看到了您的编辑,但意识到您的
var snap=…
可以显著缩短,所以我再次编辑了我的答案。很好,这对我来说有点紧凑,使它更难阅读,但我想这是一个品味问题。@Himmators在这种情况下,我建议更改
返回snap
to
返回true
使返回值的布尔值对
find
很重要。我相信你被
返回快照甩了因为您在第二个代码段中修改了返回语句。您如何使用第二个示例将其分配给此。scrollTo?更新的问题,谢谢@Himmators供您参考,我看到了您的编辑,但意识到您的
var snap=…
可以显著缩短,所以我再次编辑了我的答案。很好,这对我来说有点紧凑,使它更难阅读,但我想这是一个品味问题。@Himmators在这种情况下,我建议更改
返回snap
to
返回true
使返回值的布尔值对
find
很重要。我相信你被
返回快照甩了因为您在第二个代码段中修改了返回语句。干净简单的解决方案。完美。清洁和简单的解决方案。完美的