【问题标题】:how to increment the elements of an array by a desired value in javascript?如何在javascript中将数组的元素增加所需的值?
【发布时间】:2018-08-01 20:06:32
【问题描述】:
function sum(array) {
    var accumulator = 0;
    for (var i = 0; i < array.length; ++i) {
        accumulator += array[i];
    }
    return accumulator;
}

function range (start, end) {
    let arrayNum = [];
    for (let i = 1; i <= 10; i++ ) {
        arrayNum.push(i);
    }
    return arrayNum;
};

console.log(sum(range(1, 10)));

如何修改范围函数以采用可选的第三个参数,该参数指示构建数组时使用的“步长”值。如果未指定步长,则元素以 1 为增量递增,对应于旧行为。函数调用 range(1, 10, 2) 应该返回 [1, 3, 5, 7, 9]。确保它也适用于负步长值,以便 range(5, 2, -1) 产生 [5, 4, 3, 2]。

【问题讨论】:

  • 是作业吗?请添加您尝试过的内容或添加所需更改的位置。
  • 这读起来很像学校作业。请先尝试学习,然后再要求 Stack Overflow 解决您的作业。有很多方法可以解决这个问题,我建议您在来这里寻求帮助之前先尝试解决它。​​

标签: javascript arrays increment


【解决方案1】:

通常,您应该能够在for 循环中从start 循环到end,并以step 递增。

for(let i = start; i <= end; i+=step) { /* etc. */}

这不起作用,但是当step 为负时,因为当end 小于start 时立即满足条件。

因此,在决定测试条件应该是什么样子之前,您需要测试您是上升还是下降。

所以你的范围可以做这样的事情:

function range (start, end, step) {
    if (!step) step = 1 // step size of zero makes no sense
    let arrayNum = [];
    // using ternary to decide stopping condition
    for (let i = start; step > 0 ? i <= end: i >= end; i += step ) {
      arrayNum.push(i);
    }
    return arrayNum;
  };
  
 console.log(range(22, 34, 5))
 console.log(range(10, -10, -2))
 console.log(range(-5, -10, -1))

您还应该测试这些参数是否有意义。例如range(10, 20, -2) 没有意义,应该会抛出一个错误。我把它留给你......

【讨论】:

    【解决方案2】:

    要添加步骤,只需将步骤添加到for 循环中的i。在for 循环中,您需要istart 开始并以end 结束:

    for(let i = start; i < end; i+=step){..}
    

    您需要检查步长是否小于0,以将for 循环更改为使用i &gt;= end 而不是i &lt;= end

    function sum(array) {
    var accumulator = 0;
    for (var i = 0; i < array.length; ++i)
        accumulator += array[i];
    return accumulator;
    }
    
    function range (start, end, step) {
      let arrayNum = [];
      step = step||1;
      var numOfTimes;
      if(step<0){
      numOfTimes = -10;
      for (let i = start; i >= end; i+=step ) {
        arrayNum.push(i);
      }
      } else {
      numOfTimes = 10;
      for (let i = start; i <= end; i+=step ) {
        arrayNum.push(i);
      }
      }
    return arrayNum;
    };
    console.log((range(1, -10, -1)));
    console.log((range(1, 10, 2)));
    console.log(sum(range(1, 10, 2)));

    【讨论】:

    • 您如何发现这适用于问题中的示例:range(5, 2, -1)?
    • 我正在阅读雄辩的 JavaScript,这个问题是我正在努力理解的练习之一。
    • @MarkMeyer 感谢您提醒我。我已经编辑了我的答案。
    【解决方案3】:

    假设您希望修改您提供的原始代码,这是众多方法之一。

    此代码允许您将第三个参数设为可选。

    注意:我知道这段代码效率低下,可以写得更好。其目的是提供有关如何执行此操作的想法。

    function sum(array) {
    var accumulator = 0;
    for (var i = 0; i < array.length; ++i)
        accumulator += array[i];
    return accumulator;
    }
    
    function range (start, end) {
      let doReverse = false;
      
      let steps = (arguments.length > 2) ? +arguments[2] : 1;   
      if (steps < 0){
      	let temp = start;
        start = end;
        end = temp;
        steps = -steps;
        doReverse = true;
      }
      
      let arrayNum = [];
      for (let i = start; i <= end; i = i + steps ) {
        arrayNum.push(i);
      }
      if (doReverse){
      	arrayNum = arrayNum.reverse();
      }
      return arrayNum;
    };
    
    console.log(sum(range(1, 10, 2)));
    console.log(range(5, 2, -1))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 2020-10-13
      • 2019-04-17
      • 1970-01-01
      • 2014-08-05
      相关资源
      最近更新 更多