在python中,你可以这样做:
[([None] * 9) for x in range(9)]
Run Code Online (Sandbox Code Playgroud)
你会得到这个:
[[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None]]
Run Code Online (Sandbox Code Playgroud)
如何在javascript中执行等效操作?
Ric*_*uen 63
var matrix = [];
for(var i=0; i<9; i++) {
matrix[i] = new Array(9);
}
Run Code Online (Sandbox Code Playgroud)
... 要么:
var matrix = [];
for(var i=0; i<9; i++) {
matrix[i] = [];
for(var j=0; j<9; j++) {
matrix[i][j] = undefined;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 63
Array.fill
考虑使用fill
:
Array(9).fill().map(()=>Array(9).fill())
Run Code Online (Sandbox Code Playgroud)
这里的想法是fill()
将填写项目undefined
,这足以让map
他们开始工作.
你也可以直接填写:
Array(9).fill(Array(9))
Run Code Online (Sandbox Code Playgroud)
替代方案Array(9).fill()
包括
Array(...Array(9))
[].push(...Array(9))
[].concat(Array(9))
Array.from(Array(9))
Run Code Online (Sandbox Code Playgroud)
我们可以在语义上重写解决方案:
function array9() { return Array(9).fill(); }
array9().map(array9)
Run Code Online (Sandbox Code Playgroud)
要么
function array(n) { return Array(n).fill(); }
array(9).map(() => array(9))
Run Code Online (Sandbox Code Playgroud)
Array.from
为我们提供了一个可选的第二个映射参数,因此我们可以选择写入
Array.from(Array(9), () => Array.from(Array(9));
Run Code Online (Sandbox Code Playgroud)
或者,如果您愿意
function array9(map) { return Array.from(Array(9), map); }
array9(array9);
Run Code Online (Sandbox Code Playgroud)
有关详细说明和示例,请参阅Array.prototype.fill()
此处的 Mozilla文档.
而且Array.from()
,在这里.
请注意,Internet Explorer 中既不支持Array.prototype.fill()
也不Array.from()
支持.上述MDN链接提供了IE的polyfill.
partition(Array(81), 9)
Run Code Online (Sandbox Code Playgroud)
如果你有一个partition
实用的方便.这是一个快速递归的:
function partition(a, n) {
return a.length ? [a.splice(0, n)].concat(partition(a, n)) : [];
}
Run Code Online (Sandbox Code Playgroud)
我们可以更有效地循环
var a = [], b;
while (a.push(b = []) < 9) while (b.push(null) < 9);
Run Code Online (Sandbox Code Playgroud)
利用push
返回新数组长度的事实.
cau*_*aub 11
// initializing depending on i,j:
var M=Array.from({length:9}, (_,i) => Array.from({length:9}, (_,j) => i+'x'+j))
// Print it:
console.table(M)
// M.forEach(r => console.log(r))
document.body.innerHTML = `<pre>${M.map(r => r.join('\t')).join('\n')}</pre>`
// JSON.stringify(M, null, 2) // bad for matrices
Run Code Online (Sandbox Code Playgroud)
注意下面这样做是错误的:
// var M=Array(9).fill([]) // since arrays are sparse
// or Array(9).fill(Array(9).fill(0))// initialization
// M[4][4] = 1
// M[3][4] is now 1 too!
Run Code Online (Sandbox Code Playgroud)
因为它创建了相同的数组引用次数9次,所以修改项目也会修改其他行的相同索引处的项目(因为它是相同的引用),因此您需要在要复制的行上另外调用.slice或.map他们(参见torazaburo在这个陷阱中失败的答案)
注意:将来可能看起来像这样,使用切片符号 - 文字提案(第1阶段)
const M = [...1:10].map(i => [...1:10].map(j => i+'x'+j))
Run Code Online (Sandbox Code Playgroud)
也有一些是Array.fill
我必须要提到。
如果只是使用下面的方法创建一个3x3矩阵。
Array(3).fill(Array(3).fill(0));
Run Code Online (Sandbox Code Playgroud)
您会发现矩阵中的值是参考。
如果您要传递价值而不是参考,则可以利用Array.map
它来创造价值。
Array(3).fill(null).map(() => Array(3).fill(0));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
87700 次 |
最近记录: |