我怎样才能让这个功能与其他运营商一起工作

How can i make this function work with other operators

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

我还没有开始 DOM 工作,我仍然在尝试先让这个添加函数工作,然后再转到 HTML 部分,所以这是我唯一的代码现在你会想知道剩下的在哪里。

这个在添加时有效。

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

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

但如果换成其他运算符如-,/,*就只有returns0; 这个是 divide

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

问题是当您应该从数组中的第一项开始时,您却从 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)

基本上你可以为object and then call this function again for each element of the array with 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]));

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