Nsa*_*ity 7 javascript arrays node.js
该代码包括从一系列数字创建一个数组,以及第三个参数,其中它指示数字的步骤,例如,如果它的步骤为 2,则它从 [1,3,5] 开始代码工作正常,除非我step以负数作为参数传递,例如NumberRange(10,5,-2);这就是错误出现的时候,在代码中它显示了我用于否定步骤的逻辑。
function NumberRange(start, end, step){
var numberList = [];
if(typeof(step) == 'undefined'){
if(start < end){
for(;start <= end; start++){
numberList.push(start);
}
console.log(numberList);
}
else if(start > end){
for(;start >= end;){
numberList.push(start);
start -= 1;
}
console.log(numberList);
}
}
else if(start > end && (Math.sign(step) == -1)){ // This is the logic I created when a negative step is given as an argument.
for(;start >= end; start - step){
numberList.push(start);
}
console.log(numberList);
}
else if(start < end && (Math.sign(step) == -1)){
console.log("Negative step cant work since the value of the beginning of the list is less than the end of it")
}
else{
for(;start <= end;){
numberList.push(start);
start += step;
}
console.log(numberList);
}
//return numberList;
};
NumberRange(10,5,-2);
Run Code Online (Sandbox Code Playgroud)
for(;condition;)只是一种丑陋的写作方式while(condition),不要这样做。
为什么它不起作用是因为这for(;start >= end; start - step)部分不更新start,只是step从中减去并丢弃结果。为什么它不起作用-是因为该分支中的 thatstep是负数,所以它应该是start += step为了向下计数。
一般来说,你不需要 4 个分支,相反,step如果是 ,你可以设置为 +/-1 ,如果你真的愿意,你仍然可以在设置它之后但在使用它之前undefined验证 的符号:step
function NumberRange(start, end, step) {
if (typeof(step) == 'undefined') {
step = Math.sign(end - start);
}
if (Math.sign(step) != Math.sign(end - start)) {
console.log(`Can't count from ${start} to ${end} using ${step} as stepsize.`);
} else {
var numberList = [];
if (start > end) {
while (start > end) {
numberList.push(start);
start += step;
}
} else {
while (start < end) {
numberList.push(start);
start += step;
}
}
console.log(numberList.join());
return numberList;
}
}
NumberRange(10, 5, -2);
NumberRange(1, 2);
NumberRange(2, 1);
NumberRange(1, 3, 2);
NumberRange(1, 3, -2);
NumberRange(3, 1, -2);
NumberRange(3, 1, 2);Run Code Online (Sandbox Code Playgroud)
那么有人可能会对两个具有相同主体的循环感到恼火,毕竟,在更复杂的条件下,它们可以折叠成一个:
function NumberRange(start, end, step) {
if (typeof(step) == 'undefined') {
step = Math.sign(end - start);
}
if (Math.sign(step) != Math.sign(end - start)) {
console.log(`Can't count from ${start} to ${end} using ${step} as stepsize.`);
} else {
var numberList = [];
while ((step > 0 && start < end) || (step < 0 && start > end)) {
numberList.push(start);
start += step;
}
console.log(numberList.join());
return numberList;
}
}
NumberRange(10, 5, -2);
NumberRange(1, 2);
NumberRange(2, 1);
NumberRange(1, 3, 2);
NumberRange(1, 3, -2);
NumberRange(3, 1, -2);
NumberRange(3, 1, 2);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19154 次 |
| 最近记录: |