热门标签 | 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上获得(包括带有功能的最终版本)。


推荐阅读
  • 本文探讨了如何利用RxJS库在AngularJS应用中实现对用户单击和拖动操作的精确区分,特别是在调整区域大小的场景下。 ... [详细]
  • ASP.NET 进度条实现详解
    本文介绍了如何在ASP.NET中使用HTML和JavaScript创建一个动态更新的进度条,并通过Default.aspx页面进行展示。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • publicclassBindActionextendsActionSupport{privateStringproString;privateStringcitString; ... [详细]
  • 在测试软件或进行系统维护时,有时会遇到电脑蓝屏的情况,即便使用了沙盒环境也无法完全避免。本文将详细介绍常见的蓝屏错误代码及其解决方案,帮助用户快速定位并解决问题。 ... [详细]
  • 本文介绍了如何利用jQuery实现对网页上多个div元素的显示与隐藏控制,包括基本的toggle方法及更复杂的显示隐藏逻辑。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文详细介绍了 `org.apache.tinkerpop.gremlin.structure.VertexProperty` 类中的 `key()` 方法,并提供了多个实际应用的代码示例。通过这些示例,读者可以更好地理解该方法在图数据库操作中的具体用途。 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • 高级缩放示例.就像谷歌地图一样.它仅缩放图块,但不缩放整个图像.因此,缩放的瓷砖占据了恒定的记忆,并且不会为大型缩放图像调整大小的图像.对于简化的缩放示例lookhere.在Win ... [详细]
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社区 版权所有