如何将 TypedArray 复制到另一个 TypedArray?

How to copy TypedArray into another TypedArray?

C# 有一个高性能的数组复制函数来复制数组 就地:

Array.Copy(source, destination, length)

它比手动操作更快,即:

for (var i = 0; i < length; i++)
    destination[i] = source[i];

我正在寻找一个等效的高性能复制函数来复制数组 就地 ,对于 Int32ArrayFloat32Array 在 JavaScript 和找不到这样的功能:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray

最接近的是 copyWithin,它只在数组内部进行复制。

是否有 TypedArrays 的内置高性能复制功能

Plan B,有内置的高性能克隆功能吗? (编辑:看起来 slice() 就是答案)

您可以使用 slice(0); 克隆数组。

var clone = myArray.slice(0);

您可以将其设为本机方法:

Array.prototype.clone = function() {
    return this.slice(0);
};

性能 link 与循环相比

您正在寻找 .set,它允许您使用输入数组(或 TypedArray)设置数组的值,可选择从目标数组的某个偏移量开始:

destination.set(source);
destination.set(source, offset);

或者,设置有限数量的输入数组:

destination.set(source.slice(limit), offset);

如果您想创建一个新的 TypedArray,您可以简单地使用 .slice:

source.slice();

克隆到现有类型数组:

destination.set(source);
destination.set(source, offset);

克隆到新的类型数组示例:(最快!)

var source = new Uint8Array([1,2,3]);
var cloned = new Uint8Array(source);