yom*_*tsu 34 javascript typed-arrays
我想合并多个arraybuffers来创建一个Blob.但是,如你所知, TypedArray没有"推"或有用的方法......
例如:
var a = new Int8Array( [ 1, 2, 3 ] );
var b = new Int8Array( [ 4, 5, 6 ] );
Run Code Online (Sandbox Code Playgroud)
结果,我想得到[ 1, 2, 3, 4, 5, 6 ].
Pri*_*orn 64
使用该set方法.但请注意,你现在需要两倍的内存!
var a = new Int8Array( [ 1, 2, 3 ] );
var b = new Int8Array( [ 4, 5, 6 ] );
var c = new Int8Array(a.length + b.length);
c.set(a);
c.set(b, a.length);
console.log(a);
console.log(b);
console.log(c);
Run Code Online (Sandbox Code Playgroud)
Jer*_*ser 10
对于客户端 ~ok 解决方案:
const a = new Int8Array( [ 1, 2, 3 ] )
const b = new Int8Array( [ 4, 5, 6 ] )
const c = Int8Array.from([...a, ...b])
Run Code Online (Sandbox Code Playgroud)
我总是使用这个功能:
function mergeTypedArrays(a, b) {
// Checks for truthy values on both arrays
if(!a && !b) throw 'Please specify valid arguments for parameters a and b.';
// Checks for truthy values or empty arrays on each argument
// to avoid the unnecessary construction of a new array and
// the type comparison
if(!b || b.length === 0) return a;
if(!a || a.length === 0) return b;
// Make sure that both typed arrays are of the same type
if(Object.prototype.toString.call(a) !== Object.prototype.toString.call(b))
throw 'The types of the two arguments passed for parameters a and b do not match.';
var c = new a.constructor(a.length + b.length);
c.set(a);
c.set(b, a.length);
return c;
}
Run Code Online (Sandbox Code Playgroud)
原始函数不检查null或类型
function mergeTypedArraysUnsafe(a, b) {
var c = new a.constructor(a.length + b.length);
c.set(a);
c.set(b, a.length);
return c;
}
Run Code Online (Sandbox Code Playgroud)