javascript - 如何制作一个同时上升和下降的循环?
问题描述
我在徘徊如何制作一个同时上下的循环。
例如,这是正常的循环:
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)
推荐阅读
- ios - 如何从 SwiftUI 的列表中获取已删除行的 ID?
- python - 无损 tiff 图像在 Python 中的第一个图像之后读取和写入时发生变化
- django - 为用户提供长时间 API 调用的日志
- github - 如何使用 env 在 Vercel 上部署 Headless CMS(Shopify):包含产品的页面未在生产中显示
- node.js - Chokidar 在 Windows 上为一个目录运行多个读取目录进程
- docker - Wiremock 容器在不重新启动的情况下不反映映射更改
- c# - 如何获得活动光标纹理?
- excel - 如何在表格中添加复选框以显示付款日期?
- php - 在使用之前检查用户是否拥有项目
- gcc - gcc - -ftest-coverage 是否将检测代码注入输出对象?