我正在尝试运行一个函数来取消两个数字之间的公因数。取消函数在我的包装函数“multiplyFraction”之外,它不会改变multiplyFraction中的变量。
function cancelFac(num1,num2){
var minVal = Math.min(num1,num2);
for(var i=2; i<=minVal; i++){
while(num1%i==0 && num2%i==0){
num1 = num1/i;
num2 = num2/i;
}
}
}
var multiplyFraction = function(){
var a = notZero(rand(13,0));
var b = notZero(rand(13,0));
//Cancel Common factors
cancelFac(a,b);
}
a和b的值保持不变。当我将for循环直接置于multiplyFraction中时,它工作得很好,但是我想让取消因子成为它自己的函数,因为我需要经常这样做。有什么想法吗?
答案 0 :(得分:1)
a和b的值将保持不变,因为它们是基本类型,而原始类型是按值传递而不是引用。如果要保持对传递的值进行的更改,则通过引用传递值,即传递对象而不是基本类型。或者从cancelFac
方法返回一个对象。试试这个。
function cancelFac(num1,num2){
var minVal = Math.min(num1,num2);
for(var i=2; i<=minVal; i++){
while(num1%i==0 && num2%i==0){
num1 = num1/i;
num2 = num2/i;
}
}
return { num1: num1, num2: num2 };
}
var multiplyFraction = function(){
var obj = {
a: notZero(rand(13,0)),
b: notZero(rand(13,0))
};
//Cancel Common factors
obj = cancelFac(obj.a, obj.b);
}
答案 1 :(得分:0)
你可以使用cancelFac中的return函数返回一个格式为“num1,num2”的字符串。现在在multiplyFraction方法中,拆分字符串并获取a和b的值。
答案 2 :(得分:0)
此外,您还可以返回包含num1和num2:
的数组function cancelFac(num1,num2){
var minVal = Math.min(num1,num2);
for(var i=2; i<=minVal; i++){
while(num1%i==0 && num2%i==0){
num1 = num1/i;
num2 = num2/i;
}
}
return [num1, num2];
}
var multiplyFraction = function(){
var a = notZero(rand(13,0));
var b = notZero(rand(13,0));
//Cancel Common factors
var result = cancelFac(a,b);
a = result[0];
b = result[1];
}
答案 3 :(得分:0)
使用返回值返回对象(或数组)中更改的值:
function cancelFac(num1,num2){
var minVal = Math.min(num1,num2);
for(var i=2; i<=minVal; i++){
while(num1%i==0 && num2%i==0){
num1 = num1/i;
num2 = num2/i;
}
}
return({a: num1, b: num2});
}
var multiplyFraction = function(){
var a = notZero(rand(13,0));
var b = notZero(rand(13,0));
//Cancel Common factors
var result = cancelFac(a,b);
a = result.a;
b = result.b;
或者,您可以传入一个对象并让它更改该对象中的值,如果您想:
function cancelFac(in){
var num1 = in.num1, num2 = in.num2;
var minVal = Math.min(num1,num2);
for(var i=2; i<=minVal; i++){
while(num1%i==0 && num2%i==0){
num1 = num1/i;
num2 = num2/i;
}
}
// set results back into passed in object
in.num1 = num1;
in.num2 = num2;
}
var multiplyFraction = function(){
var data = {num1: notZero(rand(13,0), num2: notZero(rand(13,0)};
//Cancel Common factors
cancelFac(data);
// data.num1 and data.num2 contain the two modified values