How can I merge TypedArrays in JavaScript?

后端 未结 7 488
说谎
说谎 2020-12-09 01:01

I\'d like to merge multiple arraybuffers to create a Blob. however, as you know, TypedArray dosen\'t have \"push\" or useful methods...

E.g.:

var a          


        
7条回答
  •  青春惊慌失措
    2020-12-09 01:28

    I like @prinzhorn's answer but I wanted something a bit more flexible and compact:

    var a = new Uint8Array( [ 1, 2, 3 ] );
    var b = new Float32Array( [ 4.5, 5.5, 6.5 ] );
    
    const merge = (tArrs, type = Uint8Array) => {
      const ret = new (type)(tArrs.reduce((acc, tArr) => acc + tArr.byteLength, 0))
      let off = 0
      tArrs.forEach((tArr, i) => {
        ret.set(tArr, off)
        off += tArr.byteLength
      })
      return ret
    }
    
    merge([a, b], Float32Array)
    

提交回复
热议问题