首页 > 解决方案 > 如何制作一个同时上升和下降的循环?

问题描述

我在徘徊如何制作一个同时上下的循环。

例如,这是正常的循环:

for(let i = 0; i < number.length; i++){}

for(let i = 0; i < number.length; i--){}

我怎样才能简化这个循环?

标签: javascriptalgorithmloops

解决方案


您可以在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)


推荐阅读