admin 发表于 2021-9-12 11:00:08

js/ts三目运算符自动转if else脚本

/*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("要处理的代码"));
    }

    unittest();
}(window.console));

复制上面代码到chrome的console中,填入自己要转的代码,回车即可得到结果。



页: [1]
查看完整版本: js/ts三目运算符自动转if else脚本