javascript - 如何使用单行 for 循环在 JavaScript 中创建网格?

标签 javascript arrays

程序员社区晚上好! 是否可以在 Javascript 中创建一个线性数组。为了让我的问题更清楚,我想模拟我通常在 JavaScript 上的 Python 中所做的以下一行:

>>> arrAy=[['_' for i in range(10)] for j in range(10)]

给出以下结果:

>>> for i in arrAy:
    print(i)
>>> [['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_']]

谢谢

最佳答案

首先,您需要定义 range generator因为没有内置的等效项:

function* range(n) {
  for (let i = 0; i < n; i++) yield i;
}

然后,您需要替换 generator comprehension使用 for...of 循环作为推导式是 JavaScript 中的非标准功能,将来不太可能添加到 ECMAScript 中。

const arrAy = [];
for (let i of range(10)) {
  let row = [];
  for (let j of range(10)) row.push('_');
  arrAy.push(row);
}

这与基于 python 原始生成器的生成器非常接近,但既不是惯用的 JavaScript,也不是单行代码。此外,您实际上并不需要生成器,因为无论如何您都将整个结果存储在数组中。

基于非生成器的单行代码可能如下所示:

const arrAy = Array.from({length: 10}, () => Array.from({length: 10}, () => '_'));

或更短

const arrAy = Array.from({length: 10}, () => Array(10).fill('_'));

当然,正如评论中所述,您也可以将普通的旧 for 循环压缩为单行代码,但这是代码压缩器的工作,而不是程序员的工作。

关于javascript - 如何使用单行 for 循环在 JavaScript 中创建网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44033061/

相关文章:

php - 我可以将数组绑定(bind)到 PDO 查询中的 IN() 条件吗?

c++ - {𝑥^(0),𝑥(1),……,𝑥(𝑦)}的偏群之和

javascript - 如何防止自动在 <a> 标签上执行 onclick 事件?

javascript - 如何通过捕获和处理事件与 ckeditor 交互

python - 使用套接字从 Python(客户端)向 C++(服务器)数组发送数据

javascript - 从嵌套结构递归映射 3d.js 图形节点和链接

c# - 这是如何定义的?

javascript - 查看 YUI 的源代码并想知道一些事情

javascript - 请解释一下javascript中的自动全局

javascript - WordPress - 如何将自定义类添加到子菜单 <ul> 标签