我有一个名为findLCM
的函数,它有两个参数(a,b)。
我还有一个包含未知数量元素的数组(所有数字)。为了解释的目的,我们说:
var values = [c, d, e, f]
现在我需要建立的是:
var result = findLCM(findLCM(findLCM(c,d),e),f);
我试着编写一个可以执行此操作的for循环,但是卡住了,无法解决这个问题。有人能指出正确的方法吗?
到目前为止我的代码:
var result = 0;
for(f = 0; f < values.length -2; f++) {
result *= findLCM(findLCM(values[f], values[f+1]),values[f+2]);
}
答案 0 :(得分:3)
这听起来像使用Array.prototype.reduce()的好例子:
var values = [c, d, e, f];
var lcm = values.reduce(function(previous, currentValue, currentIndex, arr) {
return findLCM(previous, currentValue);
});
alert(lcm);
答案 1 :(得分:2)
我认为您正在寻找的是使用reduce。
var findLCM = function(a,b) {
...
};
var result = [a, b, c, d, e].reduce(findLCM);
答案 2 :(得分:0)
试试这个递归函数
function findLCMArray (arr)
{
if ( arr.length > 2 )
{
return findLCM( arr.shift() , findLCMArray (arr) );
}
else
{
return findLCM( arr.shift(), arr.shift() );
}
function findLCM( x, y )
{
//logic to do LCM
}
}
或者你可以像这样循环
var arr = [2,4,6,8];
var lcmValue = arr[0];
arr.forEach ( function(value){
lcmValue = findLCM( lcmValue, value);
} );
alert(lcmValue);