当前位置: 首页 > 知识库问答 >
问题:

javascript - 计算公式执行?

公羊信厚
2024-05-07

有一个选择题,类型这样?

喜欢吃什么? 下拉选择控件

A: 苹果 下拉选择控件
B: 香蕉 下拉选择控件
C: 葡萄 下拉选择控件
D: 橘子 下拉选择控件

对应json数据如下:

const express = [      {        title: '喜欢吃什么?',        exp: 'a== 1 || b == 1',        value: '',        id: 1      },      {        title: 'A:苹果',        exp: 'b == 1',        value: '',        id: 2      },      {        title: 'B: 香蕉',        exp: '',        value: '',        id: 3      },      {        title: 'C: 葡萄',        exp: 'a == 1',        value: '',        id: 4      },      {        title: 'D: 橘子',        exp: '',        value: '',        id: 5      },    ];

逻辑: 当exp有值时下拉选择控件不可选择,否则可以选择,当B选择时,A选项满足b==1,此时A要自动勾选,C满足a==1,也要自动勾选, 标题也满足也要自动勾选

这个表达式是可以自定义,基本就是这样
image.png

下拉控件绑定数据源:

[ { value: 0, label: '否' }, { value: 1, label: '是' } ]

希望下拉选择的时候传入数据为:

value是下拉选项的值,此时B选项选择

[    { exp: 'a== 1 || b == 1', value: '', id: 1 },    { exp: 'b == 1', value: '', id: 2 },    { exp: '', value: 1, id: 3 },    { exp: 'a == 1', value: '', id: 4 },    { exp: '', value: '', id: 5 },]

输入结果为:

[    {value: 1,  id: 1 },    {value: 1,  id: 2 },    {value: 1,  id: 3 },    {value: 1,  id: 4 },    {value: 0,  id: 5 },]

来一个js函数?

共有3个答案

伯晨
2024-05-07

使用while循环计算,走到catch里说明当前选项暂时不满足计算条件,先进行下面的计算,再回来计算,noCalc长度为0,说明都已经计算了,加了个count防止爆栈,可根据选项长度动态调整下,count超出阈值,计算结果应该不作数,给予友好提示

let obj = {}, keys = '_abcdefghi', noCalc = arr, count = 0;while (noCalc.length && count < 10) {    count++    noCalc = arr.filter((item,index) => {        if(!item.exp || item.value){            obj[keys[index]] = item.value = Number(!!item.value)        }else{            try{                with(obj){                    obj[keys[index]] = item.value = Number(!!eval(item.exp))                }            }catch(err){                return true            }        }    })}return arr
闻人昕
2024-05-07
function processUserInput(dropdownSelectionObj) {    if((!dropdownSelectionObj) || dropdownSelectionObj.length != 5) {        throw new Error("传入的用户下拉选项对象不合法");    }    var a = dropdownSelectionObj[1] ? 1 : 0;    var b = dropdownSelectionObj[2] ? 1 : 0;    var c = dropdownSelectionObj[3] ? 1 : 0;    var d = dropdownSelectionObj[4] ? 1 : 0;    var rtnObj = dropdownSelectionObj.map(function(item) {        var val = 0;        if(item.value) {            val = 1;        } else if(item.exp) {            val = eval(item.exp) ? 1:0;        }        return {            value: val,            id: item.id        }    })    return rtnObj;}
任小云
2024-05-07

您希望实现的功能是,当一个选项被选中时,根据预设的逻辑表达式,自动更新其他选项的状态。为了实现这个功能,我们需要编写一个JavaScript函数,该函数会根据当前选项的状态和预设的逻辑表达式来更新其他选项的值。

以下是一个可能的实现:

function updateOptions(options, selectedOption) {  // 遍历选项数组  options.forEach(option => {    // 如果当前选项的表达式为空,或者其表达式为真,则设置为可选项    if (!option.exp || eval(option.exp.replace(/a/g, selectedOption.value === '1' ? 'true' : 'false').replace(/b/g, selectedOption.id === option.id ? 'true' : 'false'))) {      option.value = '';    } else {      // 否则,设置为不可选项,并根据逻辑表达式计算其值      option.value = eval(option.exp.replace(/a/g, 'true').replace(/b/g, 'false')) ? '1' : '0';    }  });    return options;}// 示例使用const express = [  { title: '喜欢吃什么?', exp: 'a== 1 || b == 1', value: '', id: 1 },  { title: 'A:苹果', exp: 'b == 1', value: '', id: 2 },  { title: 'B: 香蕉', exp: '', value: '', id: 3 },  { title: 'C: 葡萄', exp: 'a == 1', value: '', id: 4 },  { title: 'D: 橘子', exp: '', value: '', id: 5 },];const selectedOption = { value: '1', id: 3 }; // 假设B选项被选中const updatedOptions = updateOptions(express, selectedOption);console.log(updatedOptions);

这个函数接受两个参数:options(选项数组)和selectedOption(被选中的选项)。它遍历选项数组,并根据每个选项的表达式和选中选项的值来更新其值。如果选项的表达式为空或为真,则该选项设置为可选项(value 为空字符串)。否则,该选项设置为不可选项,并根据逻辑表达式计算其值。最后,函数返回更新后的选项数组。

请注意,这个实现使用了 eval 函数来动态计算逻辑表达式的值。虽然这在某些情况下是可行的,但使用 eval 通常是不安全的,因为它允许执行任意的JavaScript代码。在实际应用中,您可能需要寻找更安全的替代方案,例如使用已解析的抽象语法树(AST)来评估表达式。

 类似资料:
  • 本文向大家介绍AUC的计算公式相关面试题,主要包含被问及AUC的计算公式时的应答技巧和注意事项,需要的朋友参考一下 参考回答: M为正样本数,N为负样本数。Rank的值代表能够产生前大后小这样的组合数,但是其中包含了(正,正)的情况,所以要减去正例的个数所以可得上述公式。

  • 这个问题开始于一个非常复杂的工作表,但我把它简化为一个非常简单但仍然有同样的问题。 PHPExcel不是在计算公式,但是如果我改成一个简单的(code=b3/code>)它就能工作。 getvalue()返回的公式为 我的密码。 我在B3单元格处设置值8,在excel中这样做会在B8处计算相同的值。 C8有个'n'。 但是在phpexcel中,我总是得到它保存的值(2.1) 响应:2.1 在exc

  • 我有一张大表,上面有很多公式,它们之间有一个依赖层次结构。它以具有日期值的单元格开始。然后,单元格x:y(和其他单元格)有依赖于该日期的公式。那么单元格w:z(和其他单元格)有一个依赖于单元格x:y的公式。诸如此类... 这个带有日期值的主单元格使用apache POI填充。 现在我的问题是:当我打开生成的excel文件时,日期在那里,但没有一个公式被计算出来。它们都存在错误“”。似乎当公式试图自

  • 本文向大家介绍LSTM每个门的计算公式相关面试题,主要包含被问及LSTM每个门的计算公式时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 遗忘门: 输入门: 输出门:

  • 本文向大家介绍卷积池化后大小计算公式?相关面试题,主要包含被问及卷积池化后大小计算公式?时的应答技巧和注意事项,需要的朋友参考一下 首先我们应该知道卷积或者池化后大小的计算公式: out_height=((input_height - filter_height + padding_top+padding_bottom)/stride_height )+1 out_width=((input_wi

  • 目前有几个Java服务我们想在上面添加监视/警报。 所以我们从JVM收集一些关于内存使用的信息,然后我们注意到ElasticSearch有一个叫做Memmory Pressure的“度量”,这听起来也很不错,可以用来计算那些Java服务。 问题是我一辈子都找不到它,我试着从他们的github repo中搜索代码中的内存/压力。 在搜索关于内存压力如何工作的公式或解释时,总是找到基本相同的两篇理解内