Javascript 需要帮助查找数组中所有数字的和吗

Javascript 需要帮助查找数组中所有数字的和吗,javascript,arrays,for-loop,addition,Javascript,Arrays,For Loop,Addition,我试图找出1000以下3或5的倍数。在我得到所有的数字后,我想把它们加起来 我能够找到倍数并将它们添加到数组中,但无法找到如何将它们添加到一起 这是我的密码: var add = []; var count = 0; if ( i % 3 == 0 || i %5 == 0) { for (var i = 1; i <= 1000; i ++) { add.push(i); } }; function whole () { for(var i =

我试图找出1000以下3或5的倍数。在我得到所有的数字后,我想把它们加起来

我能够找到倍数并将它们添加到数组中,但无法找到如何将它们添加到一起

这是我的密码:

var add = [];
var count = 0;

if ( i % 3 == 0 || i %5 == 0) {
    for (var i = 1; i <= 1000; i ++) {
        add.push(i);
    }
};

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

whole();
var add=[];
var计数=0;
如果(i%3==0 | | i%5==0){

对于(var i=1;i,这里有一个更好的方法来求一个数字数组的和

您可以在数组中使用函数来获得“减少的”值


例如
((0+1)+2)+3
将返回
6

[1,2,3].reduce(function(x,y) { return x+y; }, 0); //=> 6

这里有另一个有趣的方法,可以用更实用的方法潜在地解决这个问题

它使用ES6,但不必担心。您可以轻松地将示例复制/粘贴到中以查看其运行。Babel还将为您提供等效的ES5

//假设我们有一个1000个数字的数组
设ns=新阵列(1000);
//用数字填充数组
对于(设i=0,len=ns.length;ix=>x%y;
设eq=y=>x=>x==y;
设id=x=>x;
让filter=f=>xs=>xs.filter(f);
让reduce=f=>i=>xs=>xs.reduce(uncurry(f),i);
设comp=g=>f=>x=>g(f(x));
设compN=减少(comp)(id);
设uncurry=f=>(x,y)=>f(x)(y);
//这些是一些可以使用可重用函数定义的帮助程序
让add=y=>x=>x+y;
设总和=减(加)(0);
设可除数by=x=>comp(等式(0))(mod(x));
//将您的解决方案定义为组合
//求和、`divisibleBy(5)`和`divisibleBy(3)``
设解=compN([
总和
过滤器(可被(5)除),
过滤器(可被(3)整除)
]);
//输出传入原始`ns`数组的解决方案
console.log(解决方案(ns));

我认为您很接近。在整个函数中,您需要返回count

function whole () {
   for(var i = 0 ; i <= add.length; i ++) {
       count = count + add[i];
   }
   return count;
};
函数整体(){

对于(var i=0;i您需要将条件放入循环中,并让循环运行到
i<1000
,因为您只希望数字小于1000

for (var i = 1; i < 1000; i ++) {
    if (i % 3 == 0 || i %5 == 0) {
        add.push(i);
    }
}
for(变量i=1;i<1000;i++){
如果(i%3==0 | | i%5==0){
加推(i);
}
}
在整个函数中,您需要运行直到i
i
,否则您将尝试向总和中添加未定义的索引

function whole () {
    for(var i = 0 ; i < add.length; i ++) {
        count = count + add[i];
    }
};
函数整体(){
对于(变量i=0;i
第一个循环永远不会发生,因为此时
i
undefined
(i%3是NaN)

我认为您只需要将
与的相反

for (var i = 1; i <= 1000; i ++) {
  if ( i % 3 == 0 || i %5 == 0) {
    add.push(i);
  }
};

只需调用reduce而不使用start参数

arr.reduce(callback[,initialValue]):
如果未提供initialValue,则previousValue将等于数组中的第一个值,currentValue将等于第二个值。


首先,上面的代码是否在一个函数中?他不需要返回count。count在全局范围内,在调用whole()之后;他可以直接从count中读取总和。为什么不呢?这是一个非常好的方法,而且通常是最好的方法。在这种情况下,他甚至不需要函数。也许你当时没有用javascript编写那么多程序。有一个称为模块模式的完整编码模式正是这样做的。从什么时候开始,模块模式需要NodeJ?请看你的答案逻辑你自己的答案似乎没有抓住问题的关键。模块模式只是众多示例中的一个。无论如何,我没有时间与你争论。我希望我鼓励你更新javascript知识。祝你有愉快的一天。
function whole () {
    for(var i = 0 ; i < add.length; i ++) {
        count = count + add[i];
    }
};
for (var i = 1; i <= 1000; i ++) {
  if ( i % 3 == 0 || i %5 == 0) {
    add.push(i);
  }
};
function whole(i, count, max){
  if(i > max){
   return count;
 }
 if(i % 3 === 0 || i % 5 === 0){
   return whole(i + 1, count + i, max);
 }
 return whole(i + 1, count, max);
}

whole(0, 0, 1000);
add.reduce(function(x, y) { return x + y; });