将三元条件运算符转换为 if 语句?

2023-12-25

使用如下所示的精简代码,

f&&!f.error?k.button.b==k.button.c.G?k.button.Q(b,e,f,c,d):k.button.b==k.button.c.o&&k.button.P(b,e,f,c,d):(console.error(f),f=f.error.message||chrome.i18n.getMessage("error_tooltip"),k.button.v(b.id,f),d({action:"error"}))

是否有一种自动化工具可以将一行条件运算符转换为一系列 if 语句?

示例1:

From

(i < 0 ? function1() : function2())

to

if (i < 0) {
    function1();
} else {
    function2();
}

示例2:

From

(i < 0 ? function1() : (i === 0 ? function2() : function3()))

to

if (i < 0) {
    function1();
} else {
    if (i === 0) {
        function2();
    } else {
        function3();
    }
}

From

f&&!f.error?k.button.b==k.button.c.G?k.button.Q(b,e,f,c,d):k.button.b==k.button.c.o&&k.button.P(b,e,f,c,d):(console.error(f),f=f.error.message||chrome.i18n.getMessage("error_tooltip"),k.button.v(b.id,f),d({action:"error"}))

to

if (f && !f.error)
{
    if (k.button.b == k.button.c.G)
    {
        k.button.Q(b, e, f, c, d)
    }
    else
    {
        k.button.b == k.button.c.o && k.button.P(b, e, f, c, d)
    }
}
else
{
    (console.error(f), f = f.error.message || chrome.i18n.getMessage("error_tooltip"), k.button.v(b.id, f), d(
    {
        action: "error"
    }))
}

使用这个(然后是 JSBeautifier):

/*jslint browser: true, vars: true, white: true, maxerr: 50, indent: 4 */
(function (console)
{
    "use strict";

    function transform(string)
    {
        var questionMark = string.indexOf("?");
        var colon = string.indexOf(":", questionMark);

        if (questionMark === -1 || colon === -1)
        {
            return string;
        }

        var condition = string.substring(0, questionMark);
        var expressions = string.substring(questionMark + 1, string.length);
        var trueExpression = null;
        var falseExpression = null;

        console.log("expressions: " + expressions);

        // While looking in pairs, find the location where the colon occurs before the question mark.
        questionMark = expressions.indexOf("?");
        colon = expressions.indexOf(":");
        while ((questionMark !== -1 && colon !== -1) && (questionMark < colon))
        {
            questionMark = expressions.indexOf("?", questionMark + 1);
            colon = expressions.indexOf(":", colon + 1);
        }

        console.log("\t" + "questionMark: " + questionMark);
        console.log("\t" + "colon: " + colon);

        trueExpression = expressions.substring(0, colon);
        falseExpression = expressions.substring(colon + 1, expressions.length);

        console.log("condition: " + condition);
        console.log("trueExpression: " + trueExpression);
        console.log("falseExpression: " + falseExpression);

        console.log("-");

        return ("if (" + condition + ") {\n" + transform(trueExpression) + "\n} else {\n" + transform(falseExpression) + "\n}");
    }

    function unittest()
    {
        console.log(transform("(i < 0 ? function1() : function2())"));
        console.log("---");
        console.log(transform("i < 0 ? function1() : function2()"));
        console.log("---");
        console.log(transform("i < 0 ? function1() : i === 0 ? function2() : function3()"));
        console.log("---");
        console.log(transform("i > 0 ? i === 1 ? function1() : function2() : function3()"));
        console.log("---");
        console.log(transform("i > 0 ? i === 1 ? function1() : i === 2 ? function2() : function3() : function4()"));
        console.log("---");
        console.log(transform("i > 0 ? i === 1 ? function1() : i === 2 ? function2() : function3() : i === 0 ? function4() : function5()"));
        console.log("---");
        console.log(transform("f&&!f.error?k.button.b==k.button.c.G?k.button.Q(b,e,f,c,d):k.button.b==k.button.c.o&&k.button.P(b,e,f,c,d):(console.error(f),f=f.error.message||chrome.i18n.getMessage(\"error_tooltip\"),k.button.v(b.id,f),d({action:\"error\"}))"));
    }

    unittest();
}(window.console));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将三元条件运算符转换为 if 语句? 的相关文章

  • 禁用外部点击时关闭模式

    我正在制作一些使用模式的博客物质化 但我的模态 onclick 外部和错误数据有问题 这是我的代码 main js function changepassword var user userlog val var content conte
  • JavaScript CSV 验证

    如何检查文本框中的逗号分隔值并在未找到时发出警报 如果有的话 里面应该有字符 比如A B C D function validate validate text box
  • 从 JavaScript 加载图像

    在我的专辑幻灯片放映页面上 我有类似的代码 span style display none img src imageUrl span span show loader span in showImage 我确定图像已加载 因此我显示图像并
  • 无法将消息发布到服务工作人员,因为控制器值为空

    我正在尝试做一个website https secure depths 31934 herokuapp com 在 Service Worker 的帮助下可以离线使用 以缓存页面所需的文件 我试图让用户控制他希望缓存的图像 为此 我使用一个
  • 在 IE8 中使用 javascript __proto__

    你好 我在 javascript 中有这两个对象 var john firstname John lastname Smith var jane firstname Jane 这样做 jane proto john 我可以访问 Jane 的
  • Javascript“this”在 IE 中丢失上下文

    以下在 firefox safari chrome 中工作正常 在 IE 中 this 似乎在 handleEvent 函数中丢失上下文 警报的结果是 object Window 这不是我想要的 当从handleEvent 输出时 this
  • 如何从 javascript 错误对象读取错误消息

    有人可以帮我解决以下问题吗 我正在通过 redux 操作进行后调用 如下所示 export const addEmployee firstName surname contactNumber email gt async dispatch
  • 使用非常大的背景位置偏移是否存在性能问题?

    我正在构建一个进度条控件 并且正在研究它实际上并不显示进度 而只是旋转 正在发生某事 的指示器的情况 我的设计基本上是交替的对角条纹 本质上是一个像这样的理发杆 但是 旋转 由于希望将尽可能多的负载转移给渲染引擎 我想为此使用 CSS 过渡
  • JS文件中的System.register是什么意思?

    在 Angular 2 中使用指令时 JS 文件中的 System register 是什么意思 我认为这个问题并不特定于 Angular2 中的指令 它是关于 ES6 TypeScript 和其他使用 SystemJS 的现代编译器的一般
  • setTimeout范围问题

    我在控制玩家重生的函数内部定义了一个 setTimeout 我正在创建一个游戏 var player death function this alive false Console log death var timer3 setTimeo
  • vuejs 模板和 asp.net 部分视图,好的做法吗?

    我在网站中使用 Vue js 并将模板添加到 html 代码中 并将 js 代码添加到单个 js 文件中 所以我不想使用 vue Vuefy Browserfy 方法 而是稍后捆绑并缩小我的 js 文件 由于我必须使用 Asp Net MV
  • Angular UI-Router:多个 URL 到单一状态

    我已经开始使用 Angular 的 ui router 并且我正在尝试弄清楚如何让多个 URL 引用单个状态 例如 orgs 12354 overview retyrns the same pages as org overview 我的
  • Angular 2 将字符串转换为 md5 哈希

    我找到了ts md5 https www npmjs com package ts md5包 但在示例中它有一个hashStr方法 但现在不行了 类型上不存在属性 hashStr Md5 使用该错误后 该错误会记录在我的控制台中 我怎样才能
  • 在循环中调用 setTimeout 未按预期工作

    下面的 JavaScript 应该 在我看来 以 0 5 秒的间隔播放一系列音符 但它会将它们全部作为一个同时的和弦来演奏 知道如何修复它吗 function playRecording if notes length gt 0 for v
  • 使用 nockjs 和 jest 进行 Promise/异步单元测试的代码覆盖率问题

    我使用 NockJS 和 Jest 为 React 应用程序编写了一个简单的 API 调用单元测试 如下所示 AjaxService js export const AjaxService post url data headers gt
  • 为什么我的 D3 SVG 图上的轴不会更新?

    I have 简单的 D3 散点图 http www raxacoricofallapatorius com test scattertest html我在显示数据的几个不同属性之间切换 但是虽然我可以更改数据点 并按照我想要的方式进行转换
  • 什么时候可以使用Javascript,什么时候不可以?

    不使用太多 javascript jquery 是个好习惯吗 我们应该尽可能避免它 为了良好的可访问性 吗 什么时候可以使用 JavaScript 什么时候不能在网页设计和开发中使用 JavaScript 在什么场景 什么条件下 Updat
  • 根据文本内容从 jquery 对象中过滤元素

    我正在尝试使用contains带有 this 关键字 但它给出了错误 JS function var check ul find li filter function return this contains two css color r
  • ‘state’未定义 no-undef

    我使用教程来学习 React 但我很快就陷入困境 在教程中 他们使用以下代码 import React Component from react class Counter extends Component state count 0 r
  • Array.of 与“[ ]”。何时使用 Array.of 而不是“[ ]”?

    当我发现时我正在读一些书Array of https developer mozilla org en docs Web JavaScript Reference Global Objects Array of 根据 MDN Array o

随机推荐

  • Pandas DataFrame 访问器类型提示

    Pandas 允许您使用以下方法扩展其 DataFrame 类pd api extensions register dataframe accessor 装饰师 虽然这是功能性的 但它不提供任何额外的类型提示功能 例如 我希望以下内容能够键
  • 视角约束有什么意义?

    在哪视图约束 http download oracle com docs cd B14117 01 server 101 b10759 clauses002 htm i1002565有用 我的意思是 Oracle 允许在视图上创建约束 它们
  • 用 AppCompat 替换 ActionBarSherlock

    我目前正在开发一个简单的导航抽屉 滑动选项卡 然而 我希望在我自己的应用程序上进行材料设计 所以 除了摆脱 我别无选择ActionBarSherlock 在这些尝试中 我发现有两种类型的导入 如下所示 import com actionba
  • 由属性公开的私有变量[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我搜索了一些文档 并尝试了 Xcode 和 AppCode 但我仍然对一些事情不确定 那么有人可以澄清我吗 如果我有名为 foo 的属性 是否应
  • Visual Studio 构建步骤和 MSBuild 构建步骤之间的差异

    我正在创建一些构建定义 我发现 Visual Studio 构建步骤和 MSBuild 构建步骤之间的唯一区别是 VS 构建步骤将 Visual Studio 版本添加到构建中 有人可以解释更多差异吗 正如丹尼尔提到的 它们几乎是一样的 主
  • 如何使用 Obj-C 轻松保存窗口大小和位置状态?

    使用 Obj C 记住应用程序加载之间的 Windows 位置的最佳方法是什么 我正在使用 Interface Builder 作为界面 是否可以通过绑定来做到这一点 推荐的方法是什么 谢谢 在 Interface Builder 的属性下
  • Nivoslider 更新或重启甚至销毁

    我在加载动态内容时尝试更新 nivoslider 时遇到一些问题 我需要做的是当我通过加载新内容时更新滑块AJAX call 所以基本上我有一个 div 从函数中获取新数据AJAX调用并在加载后我需要滑块重新初始化 我现在做的是这样的 if
  • Python 中的简单素数生成器

    有人可以告诉我这段代码做错了什么吗 无论如何 它只是打印 计数 我只想要一个非常简单的素数生成器 没什么花哨的 import math def main count 3 one 1 while one 1 for x in range 2
  • 反转带有重音字符的字符串?

    所以我看到了乔恩的双向飞碟video http vimeo com 7403673并且有一个代码示例 应该是有问题 逆转后 但我想它在 net2上失败了 恕我直言 无论如何它确实对我有用并且我确实看到了correct反转的字符串 char
  • 如何防止移动设备上弹出键盘?

    http api jqueryui com spinner http api jqueryui com spinner 我正在尝试在我的网站中使用上面的 jQuery spinner 它的演示位于 API 底部 它在计算机上确实有效 但在移
  • java.lang.reflect.Array 的 getter 和 setter 方法的目的是什么?

    Java类java lang reflect Array http docs oracle com javase 8 docs api java lang reflect Array html提供了一组用于动态创建数组的工具 然而除此之外
  • ChartJS - 绘制带有按月标签、按日数据的图表

    我想画一个折线图Chartjs http www chartjs org 按天显示数据 但按月标记 如果标签按天显示 则有很多点 所以 我想按月而不是按天显示标签 例如 有人可以教我怎么做吗 谢谢 只需将 xAxes gt time 属性配
  • Java 中考虑增补字符的字符串的总字符数(不是代码单元)

    考虑到字符串可能具有需要 2 个代码单元进行编码的增补字符 如何获取字符串的总字符数 Example String strTest a Supplementary character System out println strTest l
  • 有关禁用或隐藏菜单项的规则[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 您是否曾经遇到过这样的情况 您确实非常想使用某个菜单功能 但又无法使其被禁用或更糟的是全部消失 有一个论点是始终保持菜单启用状态 然后向用户显示
  • 我们可以在 C 中的 printf 中仅使用一个变量来表示多种格式描述符吗

    是否可以编写像我在下面编写的代码一样的代码 printf n c c n c only one variable for all printf c c c n only one variable for all 我必须在每种情况下打印不同的
  • Excel ExcelDNA C# / 尝试复制 Bloomberg BDH() 行为(在 Web 请求后写入数组)

    我想复制 Bloomberg BDH 的行为 BDH 发出 Web 请求并写入数组 但不返回数组样式 在此 Web 请求期间 该函数返回 N A Requesting 当 Web 请求完成时 BDH 函数将数组结果写入工作表中 例如 在Ex
  • 如何在 Apple Silicon (M1) 上运行 CocoaPods

    我有一个想要在 iOS 上运行的 Flutter 项目 它在我的基于 Intel 的 Mac 上运行正常 但在我的新的基于 Apple Silicon 的 M1 Mac 上无法安装 Pod LoadError dlsym 0x7f89260
  • 在 C++/boost 中将日期时间转换为不同时区

    我有印度股票市场的价格数据 但其时间和日期戳是 GMT 因此我可以使用代表正确日期和时间的数据 我需要将数据库中某些记录的日期和时间从 GMT 我当前的时区 转换为 IST mysql gt desc price hist Field Ty
  • 如何使用角度删除firebase中的json数据对象?

    我开发了简单的 Angular Firebase 应用程序 它提供基本的 CRUD 功能 firebase 中的 json 格式 J0wuZ J8P1EO5g4Xfw6 contact 56231545 company info city
  • 将三元条件运算符转换为 if 语句?

    使用如下所示的精简代码 f f error k button b k button c G k button Q b e f c d k button b k button c o k button P b e f c d console