【问题标题】:JS - "addition operator" and "subtraction operator" to number [duplicate]JS - 数字的“加法运算符”和“减法运算符”[重复]
【发布时间】:2021-05-18 12:25:38
【问题描述】:

需要把数组的所有值都改写成一个新的变量,但是要让加法和减法不是像一个字符串,也就是让代码执行,结果是3

我的问题如何解决?

代码:

<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<script>
let a = "1 + 3 - 1";
let arr = a.split(" ");

arr.forEach(function(item, i, arr) {});

//code here


</script>
</body>
</html>

【问题讨论】:

  • 没有简单的方法可以做到这一点.... eval 和 new Fuction() 是一种方法。或者有很多图书馆可以解决数学问题。
  • 你可以write your own simple expression parser(滚动到底部查看支持添加的示例)。尽管您可能只使用现有的 AST 解析器并处理该输出来评估它。或者使用图书馆为你做这件事。不确定为什么要评估字符串以及如何执行此操作。

标签: javascript


【解决方案1】:

这里不需要任何数组或循环,可以使用eval():

<!DOCTYPE html>
<html>
  <head>
    <title>Page Title</title>
  </head>
  <body>
    <script>
      let a = "1 + 3 - 1";
      let res = eval(a);
      console.log(res);
    </script>
  </body>
</html>

【讨论】:

  • 虽然您可以使用eval(),但这是一个巨大的安全风险,对于像这样简单的问题应该避免。
  • 我读到了安全风险。如果没有eval(),这段代码还能怎么解决?
【解决方案2】:

使用 if 条件(例如:if(i == "+"){}) 与下一个数字进行相应的排序。这是我的想法。我是 Js 的初学者。请调试此脚本 例如:

<script>
arr = ["5" , "+" , "1" , "-", "1"];
k=arr.length;
z=[];
evolve();
function evolve(){
 for(i=0; i < k ; i = i+2) {
    for(j=0;j>-1;j++){
         if(arr[i] == `${j}`){
                z.push(j);
                evovle();
}
}
}
}
y=z[0]
ind =1
for(i=1;i<k;i = i+2){
     if(arr[i] == "+"){
      y=y+z[ind];
     ind++
      }
     if(arr[i] == "-"){
      y=y-z[ind];
     ind++
      }
}
</script>
<h1>{{y}}</h1>

【讨论】:

  • 加法运算符有问题。它如何从字符串变为加法运算符
  • 答案是说你做数学......你检测到运算符,然后将数组中的数字添加到它的左侧和右侧
  • 请检查我最近的编辑并检查其中的任何其他错误。谢谢你
猜你喜欢
  • 1970-01-01
  • 2021-07-18
  • 2012-12-09
  • 1970-01-01
  • 2016-02-02
  • 2020-01-25
  • 2021-05-16
  • 1970-01-01
相关资源
最近更新 更多