我怎样才能更改我的 reduce() 来求和数字,直到我得到要求的数字?

How can I change my reduce() to sum numbers until I get the number which was asked for?

https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/sum-all-odd-fibonacci-numbers

我需要完成这些任务,所以我做了一个对斐波那契数列求和的函数。但是我需要求和,直到得到程序要求的数字。你能提出什么建议吗?请在必要时更正我的英语,并帮助我获得代码的答案。

sumFibs(1000) 应该 return 1785。 sumFibs(4000000) 应该 return 4613732。 sumFibs(75024) 应该 return 60696。 sumFibs(75025) 应该 return 135721.

function sumFibs(num) {

let numArr=[];

for(let i=0;i<=num;i++){

   numArr.push(i)

   }  
console.log()
let oddNumArr=numArr.filter(numbers=>numbers % 2 !== 0) 

oddNumArr.unshift(1)

let reducedArr=oddNumArr.reduce((a, b) => a + b, 0)

return reducedArr;
console.log(reducedArr)

这是您最终想要的优化代码。

function sumFibs(num) {
  let m = 0;
  let n = 1;
  let count = 0;

  while (n < num) {
    [n, m] = [n+m, n];

    if (m%2 !== 0) {
      count+=m;
    }
  }
  return count;
}
console.log(sumFibs(1000));
console.log(sumFibs(4000000));
console.log(sumFibs(75024));
console.log(sumFibs(75025));

如果您需要 reduce 函数,您应该在代码中多写几行。

这里是使用reduce函数的代码

function sumFibs(num) {
  let lastFib=0;
  let fibonacci=[0,1]; 
  let i=0;
  while(lastFib<num){
      lastFib=fibonacci[i]+fibonacci[i+1];
      fibonacci.push(lastFib);
      i++;
  }  
  fibonacci.pop();
  return fibonacci.filter(x=>x%2!==0).reduce((a,b)=>a+b);
}

console.log(sumFibs(1000));
console.log(sumFibs(4000000));
console.log(sumFibs(75024));
console.log(sumFibs(75025));

希望对您有所帮助,如有任何问题,请在下方评论! 谢谢

function sumFibs(num) {



let  numArr = [1, 1];

for(let i=0;num>=numArr[numArr.length-1];i++){

let y=numArr[0+i] +numArr[1+i]

numArr.push(y) 

}

 console.log(numArr)

 let oddNumArr=numArr.filter(numbers=>numbers % 2 !== 0) 
   let lessThanNumArr=oddNumArr.filter(n=>n<=num)  
console.log(oddNumArr)

let reducedArr=lessThanNumArr.reduce((a, b) => a + b, 0)

console.log(reducedArr)

return reducedArr;

}

sumFibs(75025);
function Fibs(item){

  if (item==0 || item==1){
    return 1;
  }
  else{
    return Fibs(item-1)+Fibs(item-2);
  }

}

function sumFibs(num) {

  let item = 0;
  let sum = 0;

  while (Fibs(item)<=num){

    if (Fibs(item)%2 > 0){
      sum = sum + Fibs(item);
    }
    item++;
  }

  
  return sum;
}