如何在javascript中将数组的元素增加所需的值?

时间:2018-08-01 20:06:32

标签: javascript arrays increment

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的增量递增,这与旧的行为相对应。函数调用范围(1、10、2)应该返回[1、3、5、7、9]。确保它也适用于负步进值,以便range(5,2,-1)产生[5,4,3,2]。

3 个答案:

答案 0 :(得分:1)

通常,您应该能够在start循环中从endfor循环并增加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)没有意义,可能应该抛出错误。我留给你...

答案 1 :(得分:0)

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

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

您将需要检查步长是否小于0才能将for循环更改为使用i >= end而不是i <= 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)));

答案 2 :(得分:0)

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

此代码使您可以将第三个参数作为可选参数。

注意:我知道这段代码效率低下,可以编写得更好。其目的是就如何做到这一点给出想法。

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))