JavaScript(初学者级)Kata-使用函数构建计算器

JavaScript(初学者级)Kata-使用函数构建计算器,javascript,Javascript,我正在解决以下问题:编写一个程序,将单词“sum”、“product”、“mean”或“sqrt”中的一个作为其第一个参数,并将一系列数字作为进一步的参数。程序将对该系列应用适当的功能。 我已经解决了它(代码如下),但它体积庞大,效率低下。我希望重新编写它,使其具有一个调用其他函数的函数计算器(即函数求和,函数乘积) 我的问题是:我如何编写函数sum、product、sqrt等,所以当函数计算器调用它们时,它们会正确地使用计算器的参数并计算数学 下面是庞大的代码: function calcul

我正在解决以下问题:编写一个程序,将单词“sum”、“product”、“mean”或“sqrt”中的一个作为其第一个参数,并将一系列数字作为进一步的参数。程序将对该系列应用适当的功能。

我已经解决了它(代码如下),但它体积庞大,效率低下。我希望重新编写它,使其具有一个调用其他函数的函数计算器(即函数求和,函数乘积

我的问题是:我如何编写函数sum、product、sqrt等,所以当函数计算器调用它们时,它们会正确地使用计算器的参数并计算数学

下面是庞大的代码:

function calculator() {

    var sumTotal = 0;
    var productTotal = 1;
    var meanTotal = 0;
    var sqrt;

    if(arguments[0] === "sum") {
        for(i = 1; i < arguments.length; i++) {
            sumTotal += arguments[i];
        }
    return sumTotal;
    }

    if(arguments[0] === "product") {
        for(i = 1; i < arguments.length; i++) {
            productTotal *= arguments[i];
        }
    return productTotal;
    }

    if(arguments[0] === "mean") {
        for(i = 1; i < arguments.length; i++) {
            meanTotal += arguments[i];
        }
    return meanTotal / (arguments.length-1);
    }

    if(arguments[0] === "sqrt") {
            sqrt = Math.sqrt(arguments[1]);
        }
    return sqrt;

}


calculator("sqrt", 17);
函数计算器(){
var sumTotal=0;
var productTotal=1;
var-meanstotal=0;
var-sqrt;
if(参数[0]=“总和”){
对于(i=1;i
您可以使用以下方法将整个参数列表传递给另一个函数:

使用不同的方法进行操作:

function sum() {
  var sumTotal = 0;
  for(i = 1; i < arguments.length; i++) {
            sumTotal += arguments[i];
  }
  return sumTotal;
}
函数和(){
var sumTotal=0;
对于(i=1;i
您只需创建一个具有所需函数的对象,然后让计算器函数调用正确的函数即可

var operations = {
  sum: function() { /* sum function */ },
  product: function() { /* product function */ },
  mean: function() { /* mean function */ },
  sqrt: function() { /* sqrt function */ }
};

function calculator(operation) {
  operation = operations[operation];
  var args = Array.prototype.slice.call(arguments, 1);
  return operation.apply(this, args);
}


如果您不太了解我在代码中所做的事情,我建议您阅读并了解。

这是家庭作业吗?如果是,请贴上这样的标签。不,不是。我是编程和JS新手。我开始使用Codecademy,但我正在努力寻找改进的方法。我找到了各种Kata的链接,我只是简单地浏览了一下,试图改进:
arguments.slice(1,arguments.length)
不起作用,因为
arguments
实际上不是一个数组,它的原型中没有
slice
方法。谢谢Peter,我会改变的,但是你的答案比我的好得多。谢谢你的帮助,彼得。我已经打开了call and apply链接,现在正在浏览这篇文章。
var operations = {
  sum: function() { /* sum function */ },
  product: function() { /* product function */ },
  mean: function() { /* mean function */ },
  sqrt: function() { /* sqrt function */ }
};

function calculator(operation) {
  operation = operations[operation];
  var args = Array.prototype.slice.call(arguments, 1);
  return operation.apply(this, args);
}