强制 Javascript 数组为 Float32



我正在使用WebGL,所以我需要一直Float32Array。有没有办法强制数组成为Float32Array?我试过这个:

var cubeVertices = new Float32Array(3 * 4 * 6);
cubeVertices = [
/* Vertices */
];

但这似乎将类型更改为Float64Array,因为我不能将其与 WebGL 一起使用,但是当我执行new Float32Array(cubeVertices)时它可以工作。我真的不想一直使用new Float32Array命令,因为它分配了无用的内存,因为我不需要数据的多个副本。

那么有没有办法在没有两个数组的情况下创建一个Float32Array,其中一个永远不会再使用?

只有 3 种方法可以创建实际Float32Array

  • new Float32Array(length)
  • TypedArray.from(source[, mapFn[, thisArg]])来源
  • TypedArray.of(element0[, element1[, ...[, elementN]]])来源

你可以做

Float32Array.from(yourArray);

from方法将类似数组的对象转换为 Float32Array,并可用于 javascript 上的其他数组类型,如 Array、Float32Array 或 Int16Array。

您可以在以下 URL 的"索引集合"上阅读有关此内容的更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects

我认为这对你来说是正确的。

var num=[6676.88,8878.99.....];
var floatVal=num.map(function(value){
return Math.fround(value);
});
console.log(floatVal);

所以我从这些答案中创建了自己的解决方案,这样就不会有两个数组浪费内存。我使用Float32Array.from函数并在那里创建一个本地数组,该数组应在该行之后删除,因此我的代码如下所示:

var cubeVertices = Float32Array.from(
[
0.5, -0.5, -0.5,
-0.5, -0.5, -0.5,
0.5,  0.5, -0.5,
-0.5,  0.5, -0.5
]
);

多亏了Akxe,使用Float32Array.of会更好,但它没有得到广泛的支持。

最新更新