如何制作一个同时上下的循环?
我在徘徊如何制作一个同时上下的循环。
例如,这是正常循环:
for(let i = 0; i < number.length; i++){}
for(let i = 0; i < number.length; i--){}
我怎样才能简化这个循环?
回答
您可以在for循环中拥有任意数量的索引:
a = [1,2,3,4,5,6,7]
for (let i = 0, k = a.length - 1; i < a.length && k >= 0; i++, k--) {
console.log(i, k)
}
或者,您可以从第一个索引计算第二个索引
a = [1,2,3,4,5,6,7]
for (let i = 0; i < a.length; i++) {
let k = a.length - 1 - i
console.log(i, k)
}
如果你想以现代方式做到这一点,根本没有任何索引,这将需要一些运行时支持:
function* iter(a) {
yield* a;
}
function* reversed(a) {
yield* [...a].reverse();
}
function* zip(...args) {
let iters = args.map(iter);
while (1) {
let rs = iters.map(it => it.next());
if (rs.some(r => r.done))
break;
yield rs.map(r => r.value);
}
}
//
a = 'abcdef'
// just like in python!
for (let [x, y] of zip(a, reversed(a)))
console.log(x, y)