Javascript 当一些是字符串,一些是数字时,如何对数组中的项执行数学运算?
我正在尝试使用jQuery和JavaScript创建一个计算器。我的方法是将每个条目(数字和运算符)添加到数组中,然后对它们执行数学运算。计算器本身不完整,因为a无法根据单击的按钮获取数组中的项的和/减/乘/除 我尝试创建两个单独的数组,认为操作符不应该是两个数组中的任何一个,但这不起作用,并且会在以后产生更多问题Javascript 当一些是字符串,一些是数字时,如何对数组中的项执行数学运算?,javascript,jquery,arrays,math,calculator,Javascript,Jquery,Arrays,Math,Calculator,我正在尝试使用jQuery和JavaScript创建一个计算器。我的方法是将每个条目(数字和运算符)添加到数组中,然后对它们执行数学运算。计算器本身不完整,因为a无法根据单击的按钮获取数组中的项的和/减/乘/除 我尝试创建两个单独的数组,认为操作符不应该是两个数组中的任何一个,但这不起作用,并且会在以后产生更多问题 7. 8. 9 / 4. 5. 6. * 1. 2. 3. - 0 . + = 您可以使用eval函数result=eval(arr1) 更多参考资料请访问 $('docume
7.
8.
9
/
4.
5.
6.
*
1.
2.
3.
-
0
.
+
=
您可以使用eval函数
result=eval(arr1)代码>
更多参考资料请访问
$('document').ready(函数(){
var num1=[];//为第一个数字集创建数组
var结果=“”;
$('.num btn')。单击(函数(){
num1.push($(this.prop('value'));//将每个数字添加到数组中
arr1=num1.join(“”);//使用“”连接不带逗号的数字
$('框').val(arr1);
控制台日志(arr1);
结果=评估(arr1);
控制台日志(结果);
});
$('.op btn')。单击(函数(){
var运算符=$(this.attr('value');
num1.push(操作员);
控制台日志(操作员);
$('#框').val('')//清除输入框
console.log($('#box').val())
});
});代码>
7.
8.
9
/
4.
5.
6.
*
1.
2.
3.
-
0
.
+
=
您尝试执行的操作实际上有点复杂,因为特定的字符串值(如*
)需要触发特定的操作(如乘法)
处理此问题的一种方法是使用下面的操作功能。您可以为用户选择的每个操作运行此功能一次
函数的evaluate
假设您已经将数字收集到一个数组中,并将运算符收集到一个单独的数组中。(这种分离有助于防止类型错误,并且可以很容易地判断需要执行多少操作。)该函数将数学结果累加到resultSoFar
变量中,并在没有剩余操作可执行时打印
让nums=[8,5,2];
设ops=[“*”,“+”];
评估(nums、ops);
函数运算(a,运算符,b){//eg:operation(8,“*”,5)
开关(操作员){
案例“+”:返回a+b;
案例“-”:返回a-b;
案例“*”:返回a*b;
case“/:返回a/b;//如果b为零,则会非常失败
违约:
控制台日志(“未知操作员:+操作员”);
返回NaN;
}
}
函数求值(numsArray,opsArray){
//要求numsArray仅比opsArray多一项
if(opsArray.length+1!=numsArray.length){
log(“错误:数组长度不匹配”);
return;//如果长度不兼容,函数将在此停止
}
//从第一个数字开始
let resultSoFar=numsArray[0];
//我们关心每个项目的索引,这是第二个参数
//传递给“Array.forEach”的匿名函数。
//正如它的名字所暗示的,第一个论点对我们来说并不重要。
forEach(函数(_,索引){
//将该操作应用于“resultSoFar”和下一个数字
resultSoFar=手术(resultSoFar、opsArray[索引]、numsArray[索引+1]);
//(在本例中,有两个操作要执行:
//第一次通过循环,8*5=40
//第二次通过循环,40+2=42)
});
console.log(resultSoFar);
}
从不eval
-这是邪恶的。如果你说永远不要使用eval,为什么他们不删除这个方法呢?什么时候使用这种方法?这种方法有效。有点无论您是否愿意,它都会使用PEMDAS评估阵列。
$('document').ready(function () {
var num1 = []; //creates array for first number set
var result = '';
$('.num-btn').click(function () {
num1.push($(this).prop('value')); //add each number to array
arr1 = num1.join(' '); //joins numbers without comma using ''
$('#box').val(arr1);
console.log(arr1);
result = (arr1);
console.log(result);
});
$('.op-btn').click(function () {
var operator = $(this).attr('value');
num1.push(operator);
console.log(operator);
$('#box').val(''); //clears input #box
console.log($('#box').val())
});
});