如何使此功能与其他操作员一起使用

时间:2017-08-03 13:46:24

标签: javascript calculator

我正在做练习,这个练习是关于制作一个简单的屏幕计算器,任务描述指定使函数加,乘,减,除需要两个将被评估的数字。 但是我检查了一些来自其他人的实时版本并且它接受了两个以上的数字,所以也许他们使用了一个数组..我试图制作一个但是这个并不适合其他运营商,比如/ = ,* =和 - = .. 我怎样才能使这些操作符不仅仅是添加...

我还没有参与DOM工作,我仍然试图在移动到HTML部分之前首先使这个添加功能工作,所以这是我现在唯一拥有的代码&#39 ;我想知道其他地方在哪里。

这个在添加时有用。

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]);

3 个答案:

答案 0 :(得分:1)

问题是当你开始使用数组中的第一项时,你将从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)

答案 1 :(得分: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 :(得分:0)

你的大错误是你总是乘以或除以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;
          });
      }

<强>演示:

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