Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当一些是字符串,一些是数字时,如何对数组中的项执行数学运算?_Javascript_Jquery_Arrays_Math_Calculator - Fatal编程技术网

Javascript 当一些是字符串,一些是数字时,如何对数组中的项执行数学运算?

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

我正在尝试使用jQuery和JavaScript创建一个计算器。我的方法是将每个条目(数字和运算符)添加到数组中,然后对它们执行数学运算。计算器本身不完整,因为a无法根据单击的按钮获取数组中的项的和/减/乘/除

我尝试创建两个单独的数组,认为操作符不应该是两个数组中的任何一个,但这不起作用,并且会在以后产生更多问题


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())
    });
    });