【问题标题】:How can i make this function work with other operators如何使此功能与其他运营商一起使用
【发布时间】:2017-08-03 13:46:24
【问题描述】:

我正在做一个练习,这个练习是关于制作一个简单的屏幕计算器,任务描述指定制作一个函数加、乘、减、除,它需要两个将被计算的数字。 但是我检查了其他做这个练习的人的一些实时版本,它接受两个以上的数字,所以也许他们使用了一个数组。我也尝试尝试制作一个,但是这个不适用于其他运算符,如 /=,* = 和 -= .. 我如何才能使这些运算符与这些运算符一起工作而不仅仅是加法..

我还没有参与 DOM 工作,我仍在尝试先让这个 add 函数工作,然后再转到 HTML 部分,所以这是我现在唯一的代码,以防你想知道其余的在哪里.

这个在添加时有效。

function add(arr){
  var ans = 0;
  for(var i=0;i<arr.length;i++){
    ans += arr[i];
  }

  return ans;
}
add([100,2000,3000]);

但如果换成其他运算符如-,/,*则只返回0; 这个是分开的

 function divide(arr){
      var ans = 0;
      for(var i=0;i<arr.length;i++){
        ans /= arr[i];
      }

      return ans; // will return 0
    }
    divide([2000,1000]);

【问题讨论】:

  • “不起作用”以什么方式?这段代码怎么失败了?
  • 首先您应该重命名函数,使其具有通用性,并且您可以使用数组的另一个参数来指定操作。
  • 可以设置var ans = arr[0],然后启动i = 1
  • 那是因为0/1000/20000
  • 抱歉信息不足,我编辑了它。如果尝试与其他运算符(例如 /.* 或 -)一起尝试,则返回 0 或 - 只有 + 评估为有效答案。

标签: javascript calculator


【解决方案1】:

基本上,您可以为object 中的每个操作获取一个函数,然后使用Array#reduce 为数组的每个元素再次调用此函数

var operators = {
        addition: function (a, b) { return a + b; },
        subtraction: function (a, b) { return a - b; },
        multiplication: function (a, b) { return a * b; },
    };

function calculate(operand, values) {
    return values.reduce(operators[operand]);
}

console.log(calculate('addition', [40, 1, 1]));
console.log(calculate('subtraction', [40, 1, 20]));
console.log(calculate('multiplication', [1, 2, 3, 4, 5, 6, 7]));

【讨论】:

    【解决方案2】:

    问题是您从ans = 0 开始,而您应该从数组中的第一项开始。如果你从第一个项目开始,你应该从第二个开始你的循环。这应该适用于所有情况,但在下面我以除法为例。

    function div(arr){
      var ans = arr[0];
      for(var i=1;i<arr.length;i++){
        ans /= arr[i];
      }
      return ans;
    }
    let answer = div([100,2000,3000]);
    
    console.log(answer);
    console.log(100/2000/3000)

    【讨论】:

    • 感谢感谢。
    【解决方案3】:

    你的大错误是你总是乘以或除以0,这会影响整个结果。

    您应该将结果初始化为第一个数组元素:

     function divide(arr){
          var ans = arr[0];
          for(var i=1;i<arr.length;i++){
            ans /= arr[i];
          }
    
          return ans; // will return 0
        }
        divide([2000,1000]);
    

    但我建议使用.reduce() 它将避免出现此问题:

         function divide(arr){
              return arr.reduce(function(a, b){
                    return a/b;
              });
          }
    

    演示:

         function divide(arr){
              return arr.reduce(function(a, b){
                    return a/b;
              });
         }
            console.log(divide([2000,1000, 10]));

    【讨论】:

    • 您的循环不应从 0 开始,否则您将 arr[0] 除以 arr[0]。此外,您忘记将函数调用从添加更改为除法。
    • @KhauriMcClain 是的,我改正了,谢谢。
    猜你喜欢
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    相关资源
    最近更新 更多