热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将Javascriptif/else转换为Ramdacond问题

如何解决《将Javascriptif/else转换为Ramdacond问题》经验,为你挑选了1个好方法。

我在if / else逻辑检查后发现一些处理问题。让我们举个例子。

基本配置

const result = {
  data: 1,
  state: {
    pass: 'N'
  }
}

对于JS if / else检查,逻辑检查后不应显示日志

function checking() {
  if(result.state.pass !== 'Y') {
    return result;
  }

  console.log("Should not appear the log")
}

checking()

然后,我尝试使用Ramda cond函数进行翻译

function checking() {
  R.cond([
    [
      R.compose(R.not, R.equals('Y'), R.prop('pass'), R.prop('state')),
      (res) => res
    ]
  ])(result)

  console.log("Should not appear the log")
}

checking()

但是,日志出现在Ramda cond示例中。我可否知道

有什么问题吗?

我可以在该示例上进行哪些增强?

谢谢。



1> Scott Sauyet..:

已更新:我本来会向后阅读有关应在何时显示日志的内容。


我的建议如下所示:

const checking = R.when(
  R.compose(R.equals('Y'), R.path(['state', 'pass'])),
  (res) => {console.log("Should not appear in the log"); return res;}
)

这是我从您的代码到达那里的方式:我的第一步是修复对的使用cond

const result1 = {data: 1, state: {pass: 'N'}}
const result2 = {data: 2, state: {pass: 'Y'}}

const checking = R.cond([
  [
    R.compose(R.not, R.equals('Y'), R.prop('pass'), R.prop('state')),
    R.identity
  ],
  [
    R.T, 
    (res) => {console.log("Should not appear in the log"); return res;}
  ]
])

checking(result1); 
//=> {data: 1, state: {pass: 'N'}} 
checking(result2);
// logs "Should not appear in the log
//=> {data: 2, state: {pass: 'Y'}}

请注意,这cond最像一条switch语句:它接收条件相关对的集合并返回一个函数,该函数将其参数传递给每一对,直到找到条件为真的对,然后返回调用其结果的结果。因此,对于第二个条件,我们只需检查R.T,它是一个始终返回的函数true,并用于identity返回输入。

现在,此新函数接受一个result对象并返回原样,如果它与初始测试不匹配,则将一条消息记录到控制台。


但这还没有结束。此代码可以重构。

这是我将应用的一个简单修复程序:

const checking = R.cond([
  [
    R.compose(R.not, R.equals('Y'), R.path(['state', 'pass'])),
    R.identity
  ],
  [
    R.T, 
    (res) => {console.log("Should not appear in the log"); return res;}
  ]
])

只是从更改compose(prop('pass'), prop('state'))path(['state', 'pass'])。这是一个小调整,但我认为这更干净。


下一个变化更具实质性。

const checking = R.ifElse(
  R.compose(R.not, R.equals('Y'), R.path(['state', 'pass'])),
  R.identity,
  (res) => {console.log("Should not appear in the log"); return res;}
)

当我们有一个cond仅包含两个分支的语句,并且第二个语句处于测试状态时R.T,可以使用来更清楚地编写此语句ifElse。这需要一个条件和两个结果,一个用于条件通过时,一个用于失败时。


这可能是您想达到的目标,特别是如果您最终计划在失败条件下执行其他操作时。但是,如果不是这样,而您实际上只需要一个结果,那么对于那些第二个结果只是传递的情况,R.unless可以对进行进一步的简化ifElse

const checking = R.unless(
  R.compose(R.not, R.equals('Y'), R.path(['state', 'pass'])),
  (res) => {console.log("Should not appear in the log"); return res;}
)

unless 只需检查条件并在条件为假时运行结果,并在条件为真时返回完整的输入。


但是,我们可以拉出的not由切换以及unlesswhen

const checking = R.when(
  R.compose(R.equals('Y'), R.path(['state', 'pass'])),
  (res) => {console.log("Should not appear in the log"); return res;}
)

我可能会把它留在那儿,尽管我可能会log为了清楚起见而排除一个函数。

所有这些都可以logRamda REPL上获得(包括带有功能的最终版本)。


推荐阅读
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文详细介绍了Java中的访问器(getter)和修改器(setter),探讨了它们在保护数据完整性、增强代码可维护性方面的重要作用。通过具体示例,展示了如何正确使用这些方法来控制类属性的访问和更新。 ... [详细]
  • 在 ExtJS 中,类的别名(alias)是开发过程中非常有用的一个特性。通过别名,开发者可以使用简短且易于记忆的名称来引用复杂的类名。本文将详细探讨如何在 ExtJS API 中使用和定义别名,并提供实例说明。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • C++: 实现基于类的四面体体积计算
    本文介绍如何使用C++编程语言,通过定义类和方法来计算由四个三维坐标点构成的四面体体积。文中详细解释了四面体体积的数学公式,并提供了两种不同的实现方式。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
author-avatar
joechl
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有