前言
最近我们公司对以前的代码平台,进行一次大迭代,以前的低代码平台是不需要有多复杂的操作,只需要将配置的页面完全展示出来。现在配置组件可以根据别的组件的值随时进行更改。
在这个需求上,开发与产品想出了两个方案,一个就是数据联动(这个有机会再讲),另一个就是本文章重点公式表达式,但这个由于从产品到开发并没有深入的了解过,于是我们就参照的钉钉的公式编辑器
流程图如下
本次主要讲解就是解析,翻译这部分的逻辑
解析公式
我们这边是将公式完全当成字符串来进行处理的,我们会定一个下标,用来记录解析到字符串那一步,每一个解析字符的时候,下标都要后加一,类似于
let str = `$FN(1, 2)`
let index = 0 // 记录的下标
str[index] // 就是$
前面讲完我们底层实现方法后,我们再来讲解,函数等解析方式
- 函数解析, 我们在定义函数的时候,会在前面添加 $ 用于区别,同时解析 ) 用来作为函数的结束符
- 字符串解析,我们在定义字符串的时候,会定义 "222" 为字符串,'222' 会在编辑时会报错,在编辑那边就阻断这个编辑方案
- 数组解析, 数组解析起来就比较的简单了,当然使用 [] 用来作为数组咯
- 数字解析, 数字解析时候的我们会解析到一个特殊字符,例如 , [ ] " " 等字符用于数字的结尾,解析完后,再利用isNaN来判断是否为数字。(关于isNaN,大家可以看developer.mozilla.org/zh-CN/docs/…)
但这边尤其注意讲一下,每一次解析完类型后,都要注意一些下标所在的位置,如果在解析下一个类型的时候,下标的位置错误,会导致后面的解析出现大问题,这个是我在做解析的时候踩到的一个坑,当时问题找了好久≡(▔﹏▔)≡。
解析完成后,再通过eval 这个方法将解析公式完成翻译
结尾
我也是将字符串根据自己设置特定字符来进行解析翻译的,同时也标明其中的下标用于区别我解析到了那一步。大家我是第一次写文档,有什么不好的地方请尽谅