JavaScript中如何将包含Float32Array的数组扁平化?
问题原因
Array.prototype.flat() 仅会展开普通JS数组类型的嵌套元素,而Float32Array属于TypedArray类,不属于原生Array的实例,因此不会被flat()识别为需要展开的嵌套结构。
解决方案
1. 输出为普通JS数组(推荐)
直接用flatMap方法,对每个Float32Array做一次类型转换后自动合并:
const result = arr.flatMap(item => [...item]) // 或者用Array.from写法 const result = arr.flatMap(item => Array.from(item))
执行后直接得到你需要的一维普通数组:[0.3, 0.7, 0.1, 0.2, 0.544, 0.21]
2. 输出为Float32Array类型(性能更优)
如果不需要转普通数组,想要保留TypedArray的特性同时减少内存开销,可以用批量拷贝的方案:
const totalLength = arr.reduce((sum, item) => sum + item.length, 0) const result = new Float32Array(totalLength) let offset = 0 for (const subArr of arr) { result.set(subArr, offset) offset += subArr.length } // 如果后续需要转普通数组,用[...result]即可
内容的提问来源于stack exchange,提问作者little_monkey
相关产品推荐
相关产品推荐

