Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.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_Add_Calculator_Subtraction - Fatal编程技术网

Javascript 我能把四个函数合并成一个吗?

Javascript 我能把四个函数合并成一个吗?,javascript,add,calculator,subtraction,Javascript,Add,Calculator,Subtraction,我不确定我的措辞是否正确,但基本上我已经写出了4个函数,我必须构建一个计算器,每个函数用于除法、加法、乘法和减法。有没有办法将所有这些“命令”添加到一个函数中,而不是四个单独的函数 多谢各位 function add (num1, num2){ var intOutput= parseInt(num1)+parseInt(num2); document.getElementById("output").innerHTML=intOutput; } function subtra

我不确定我的措辞是否正确,但基本上我已经写出了4个函数,我必须构建一个计算器,每个函数用于除法、加法、乘法和减法。有没有办法将所有这些“命令”添加到一个函数中,而不是四个单独的函数

多谢各位

function add (num1, num2){
    var intOutput= parseInt(num1)+parseInt(num2);
    document.getElementById("output").innerHTML=intOutput;
}

function subtract (num1, num2){
    var intOutput= parseInt(num1)-parseInt(num2);
    document.getElementById("output").innerHTML=intOutput;
}

function multiply (num1, num2){
    var intOutput= parseInt(num1)*parseInt(num2);
    document.getElementById("output").innerHTML=intOutput;
}


function divide (num1, num2){
    var intOutput= parseInt(num1)/parseInt(num2);
    document.getElementById("output").innerHTML=intOutput;
}

听起来您需要一个通用函数,它将有条件地执行请求的操作。像这样的方法应该会奏效:

function calculate(num1, num2, action)
{
    if (action == 'add') {
        //...
    } else if (action == 'subtract') {
        //...
    } else if (action == 'multiply') {
        //...
    } else if (action == 'divide') {
        //...
    }
}

编辑:为了可读性和长期可维护性,您可能仍然希望将实际操作保留在单独的函数中,只需从各个if分支调用它们。

您可以重构所有DOM代码:

function proc(op, num1, num2) {
    document.getElementById("output").innerHTML = op(parseInt(num1), parseInt(num2));
}
然后使用这些简单的帮助程序:

var addOp = function (a, b) { return a + b; };
var subOp = function (a, b) { return a - b; };
var multOp = function (a, b) { return a * b; };
var divOp = function (a, b) { return a / b; };
你可以做任何你想做的事:

proc(addOp, num1, num2);
proc(subOp , num1, num2);
proc(multOp , num1, num2);
proc(divOp , num1, num2);

既然这听起来像家庭作业,我就给你一个家庭作业式的答案

你知道你可以从任何地方调用一个函数,包括另一个函数,所以完全有可能创建一个函数来控制它们

例如:

function helloJohn() {
    console.log('Hello John');
}

function helloJane() {
    console.log('Hello Jane');
}

function hello(name) {
    if (name === 'John') {
        helloJohn();
    } else if (name === 'Jane') {
        helloJane();
    }
}
我可以很容易地将hello函数更改为包含helloJohn和helloJane功能

function calculate(type, num1, num2) {
    var _in  = parseInt(num1, 10),
        _out = parseInt(num2, 20),
        output = 0;

    switch(type) {
        case 'add':
            output = _in + _out;
            break;
        case 'subtract':
            output = _in - _out;
            break;
        case 'multiply':
            output = _in * _out;
            break;
        case 'divide':
            output = _in / _out;
            break;
    }

    document.getElementById("output").innerHTML = output;
}
用作

calculate('add', 10, 20); // 30
calculate('multiply', 10, 20); // 200
// etc...
如果您确保字符串只是一个数字、一个运算符和一个数字,那么您可以使用eval来获得一些乐趣,尽管eval是邪恶的

function calculate(str) {
    if (/\d+(\*|\-|\+|\/)\d+/.test(str))
        document.getElementById("output").innerHTML = eval(str);
}
那你就可以这么做了

calculate('20*10')
calculate('20+100')
calculate('1000/100')

您可以使用函数变量抽象出常见行为:

function calculateAndDisplay(num1, num2, operation) {
    var intOutput= operation(num1, num2);
    document.getElementById("output").innerHTML=intOutput;
}

function add(num1, num2) {
    calculateAndDisplay(num1, num2, function(a, b) { return a + b; });
}

...

如果为执行的操作添加另一个参数,则应该能够执行此操作。也许每个操作都需要一个开关

function operate(n1,n2,op){
    var output;    
    switch(op){
        case 'add':
            output = n1+n2;
            break;
        case 'sub':
            output= n1-n2;
            break;
        case 'div':
            output = n1/n2;
            break;
        case 'mul':
            output = n1*n2;

    }
    document.getElementById('output').innerHtml = output
}

你可以,但你为什么要?这是家庭作业吗?你指的是在一个函数中添加if语句,而不是将它们分开吗?尝试找到一种更简单的方法,因为我计划向javascript文件添加更多内容,并希望尽可能缩短所有内容。为什么不使用javascript中已有的数学函数呢?哦,谢谢@Anon,我会尝试!完美的非常感谢。我要试一试。
function operate(n1,n2,op){
    var output;    
    switch(op){
        case 'add':
            output = n1+n2;
            break;
        case 'sub':
            output= n1-n2;
            break;
        case 'div':
            output = n1/n2;
            break;
        case 'mul':
            output = n1*n2;

    }
    document.getElementById('output').innerHtml = output
}