JavaScript : The sum of its range

标签 javascript for-loop

我目前正在遵循 Eloquent Javascript 的练习,但在一项练习中遇到了一些困难。我用代码来解释一下:

var _numberArray = [];

function range(start, end, step) 
{
  console.log(_numberArray); 


  if (!step)
  {
    step = 1;
  }

  if (step < 0)
  {
     for(var i = start; i >= end; i -= step) 
     {
        _numberArray.push(i);
        console.log(_numberArray);


     }
  }
  else 
  {

     for(var i = start; i <= end; i += step) 
     {
        _numberArray.push(i);
        console.log(_numberArray);
     }
  }


    return _numberArray;
}


  function sum(array) 
  {
    var total = 0; 
    for (var i = 0; i < array.length; i++)
    {

        total += array[i];

    }
  return total;

}

console.log(sum(range(42,14,-2)));

因此,我创建了范围函数,在其中检查步骤参数是否已设置。如果不是,则将默认的步长变量设置为 1。如果步长小于 0,只要第一个参数大于第二个参数,就一定要循环其中,并用给定的步长量递减该值。这对于递增也是一样的。

但是,只有当我使用负值时,此代码才会导致崩溃。所以当我做“sum(range(22,6,-2));”时代码崩溃了。反过来“sum(range(6,22,2));”它确实有效。当我更换时:

  for(var i = start; i >= end; i -= step) 
         {
            _numberArray.push(i);
            console.log(_numberArray);


         }

对于:

    for(var i = start; i >= end; i--) 
     {
        _numberArray.push(i);
        console.log(_numberArray);


     }

它又起作用了!有人可以帮助我并让我了解为什么它崩溃以及为什么最后一种方法有效吗?

谢谢。

最佳答案

由于步长值为负,并且您正在向下迭代,因此您需要添加它,而不是减去它:

for(var i = start; i >= end; i += step) 

减去 -2 与加 2 相同,因此得到 42, 44, 46, ... 并且该值始终大于“end”(14),因此是无限循环。

关于JavaScript : The sum of its range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24965173/

相关文章:

javascript - 如何解决 RxJS 范围重叠问题?

c - 如何使输入值(来自 print,scan 语句)成为循环生成的 vector 的第一个值?

java - 如何使用java比较两个arraylist元素

javascript - 在切换时翻转表格行内容

javascript - 如何使javascript FOR LOOP在循环之前等待某些条件

c - OpenMP:首先完成第一次迭代

C语言删除字符串中所有重复字符的程序

javascript - 将参数传递给现有的 onClick JS 函数

javascript - 无法显示和更新基于动态创建和删除内容jquery的选择

javascript - 我如何根据数组字符串元素的第一个字符在 Javascript 中对数组进行排序? - javascript