我尝试使用类型化数组而不是数组来减少内存:
function createarrayInt8(numrows,numcols,number){
var arr = new Int8Array(numrows);
for (var i = 0; i < numrows; ++i){
var columns = new Int8Array(numcols);
for (var j = 0; j < numcols; ++j){
columns[j] = number;
}
arr[i] = columns;
}
return arr;
}
但是我无法创建多维类型数组。为什么?我是否只需要将"数字"变量转换为 Int8?
类型化Int8Array
只能容纳 8 位整数。因此arr[i] = columns
不起作用,因为列的类型是 Int8Array
类型,无法转换为 8 位整数并将其存储(以任何有意义的方式)。
解决方案:要么arr
成为通用Array
,其元素可以是数组,要么 - 可能是更高级但通常性能更高的解决方案 - 将多维数组存储为大小numrows * numcols
的单个平面数组,并通过arr[column + row * numcols]
访问元素:
var numrows = 5, numcols = 4;
var arr = new Int8Array(numrows * numcols).fill(0);
arr[3 + 1 * numrows] = 1; // col = 3, row = 1
console.log (arr);