程序员社区晚上好! 是否可以在 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/