How to copy TypedArray into another TypedArray?

Brendan Hill picture Brendan Hill · Feb 22, 2016 · Viewed 10.9k times · Source

C# has a high performance array copying function to copy arrays in place:

Array.Copy(source, destination, length)

It's faster than doing it manually ie.:

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

I am looking for an equivalent high performance copy function to copy arrays in place, for Int32Array and Float32Array in Javascript and can find no such function:

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

The closest is "copyWithin" which only does an copy internally within an array.

Is there a built in high performance copy function for TypedArrays in place?

Plan B, is there a built in high performance clone function instead? (EDIT: looks like slice() is the answer to that)

Answer

apsillers picture apsillers · Feb 22, 2016

You're looking for .set which allows you to set the values of an array using an input array (or TypedArray), optionally starting at some offset on the destination array:

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

Or, to set a limited amount of the input array:

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

If you instead want to create a new TypedArray, you can simply use .slice:

source.slice();