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]。
答案 0 :(得分:1)
通常,您应该能够在start
循环中从end
到for
循环并增加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
循环中,您需要i
从start
开始到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))