动态改变循环的方向
alter the direction of loop dynamically
我正试图想出一个算法在两个整数之间的"接近"行为。基本上,给定两个整数,a
和b
,我希望a
"接近"b
,即使b
小于a
。我认为这应该是循环递增函数的交换方式:
for (var i = a; approachCond(i, a, b); approachDir(i,a, b)) {
// some fn(a, b);
}
,
approachCond(i, a, b) {
return a < b ? i < b : i > b;
}
和
approachDir(i, a, b) {
return a < b ? i++ : i--
}
然而,当我尝试这样做的浏览器冻结(Chrome)。有人知道如何动态地改变循环的方向吗?
我认为如果你只使用while
循环,它会更清楚地阅读:
'use strict';
let a = 12, b = 6;
let i = a;
while (i !== b) {
console.log(i);
i += a < b ? 1 : -1;
}
我甚至放弃了可爱的三进制,因为现在人们似乎如此反对if语句。
浏览器冻结,因为您没有更改正确的i
。您只是在操作approachDir
函数中的i
。如果你退货&设置for
范围i
为新值,它将工作。
试题:
for (var i = a; approachCond(i, a, b); i = approachDir(i,a, b)) {
// some fn(a, b);
}
approachDir(i, a, b) {
return a < b ? i + 1 : i - 1
}
似乎你把一些并不那么困难的事情复杂化了。你可以将步骤设置为正或负。例如
var a = 20;
var b = 5;
for (var step = a > b ? -1 : +1; a != b; a += step)
{
console.log(a);
}
问题在approachDir
。i++
和i--
分别为post-increment和post-递减。这意味着它们在返回其原始值之后更新变量。所以函数返回的是原始值,而不是更新后的值。要在返回之前更新变量,应该使用++i
或--i
。
但是您根本不需要使用自增操作符,因为局部变量会立即消失。只需返回新值。
function approachDir(i, a, b) {
return a < b ? i + 1 : i - 1;
}
你还需要在循环中重新分配变量:
for (var i = a; approachCond(i, a, b); i = approachDir(i, a, b)) {
...
}
在编写代码时,您假定变量是通过引用传递的,而不是通过值传递的,因此函数中的增量将修改调用者的变量。
一个选项是根据a>b
将approachDir
更改为返回正数或负数。中间的语句可以包含一个||,并且可以任意使用。
function approachDir(a, b){
return a>b?-1:1;
}
var a=3;
var b=1;
for (var i = a; i<b||i>b; i+=approachDir(a, b)) {
console.log(i);
}
a=1;
b=3;
for (var i = a; i<b||i>b; i+=approachDir(a, b)) {
console.log(i);
}
我对@mathletics的答案做了一点改动:
function loopDynamic(from, to) {
const direction = from < to ? 1 : -1;
let i = from
while (i!== to) {
// do whatever with i
i += direction;
}
}
相关文章:
- jQuery:循环一个具有不同超时值的循环
- 在循环中分配json值时,值被覆盖
- 如何在下面的ES6循环中获得前面的文本
- 为什么“;未定义的“;在JavaScript中结束循环
- ng映射方向备选方案
- Javascript循环不会自我更新
- 如何使用jquery处理php循环通过元素
- 而循环只设置php中输入字段中的第一个值
- 循环遍历数组中的特定索引
- Javascript返回值只在循环中返回一次
- 按照选项卡索引的顺序循环一个jQuery选择
- 循环遍历以数组为值的Javascript对象
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 循环结束/推送到数组之前在页面上呈现EJS
- 柔性滑动器2在一个方向上继续循环而不工作
- Javascript:在多个轴/方向上迭代/循环
- 循环优化改变方向
- 动态改变循环的方向
- jQuery动画制作幻灯片图像循环在同一个方向上迭代