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