晚上好的程序员社区! 是否可以在Javascript中创建一个单线阵列。为了使我的问题更清楚,我想模仿以下我在Python上用Python做的一个班轮:
>>> arrAy=[['_' for i in range(10)] for j in range(10)]
得出以下结果:
>>> for i in arrAy:
print(i)
>>> [['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_'],
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_']]
谢谢
答案 0 :(得分:2)
首先,您需要定义range generator,因为没有内置等效项:
function* range(n) {
for (let i = 0; i < n; i++) yield i;
}
然后,您需要将generator comprehension替换为for循环,因为理解是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-loop压缩成一个单行,但这是代码缩小器的工作,而不是程序员。
答案 1 :(得分:0)
是的,您可以使用map
和fill
的魔力。
const grid = (width, height, value) => new Array(width)
.fill(null)
.map(v => new Array(height)
.fill(value));
const grid10x10 = grid(10, 10, "_");
console.log(grid10x10); // tada!
&#13;