0

我試圖使用類型數組代替數組,以減少存儲器: JavaScript的多維類型數組(Int8Array)例如

function createarrayInt8(numrows,numcols,number){ 
 
     
 
\t var arr = new Int8Array(numrows); 
 
      
 
\t for (var i = 0; i < numrows; ++i){ 
 
\t \t var columns = new Int8Array(numcols); 
 
\t \t for (var j = 0; j < numcols; ++j){ 
 
\t \t \t columns[j] = number; 
 
\t \t } 
 
\t \t arr[i] = columns; 
 
\t } 
 
    
 
\t return arr; 
 
}

但我不能創建多維類型數組。 爲什麼? 我是否只需要將「數字」變量轉換爲Int8?

+0

那麼,一個類型數組只能存儲它的類型的值。因此uint8數組只能存儲無符號的8位整數,但不能存儲數組(uint)。 –

+0

我差不多這麼想:)。但如何獲得一個多維數組,只存儲無符號的8位整數來減少已用內存? –

回答

4

鍵入的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);