TypedArray
.from()
method creates a new
typed array
from an array-like or iterable object. This method is nearly the same as
Array.from()
.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
TypedArray.from(source[, mapFn[, thisArg]])
Where
TypedArray
is one of:
Int8Array
Uint8Array
Uint8ClampedArray
Int16Array
Uint16Array
Int32Array
Uint32Array
Float32Array
Float64Array
BigInt64Array
BigUint64Array
source
An array-like or iterable object to convert to a typed array.
mapFn
可选
Map function to call on every element of the typed array.
thisArg
可选
this
when executing
mapFn
.
A new
TypedArray
实例。
TypedArray
.from()
lets you create typed arrays from:
length
property and indexed elements); or
Map
and
Set
).
TypedArray
.from()
has the optional parameter
mapFn
, which allows you to execute a
map()
function on each element of the typed array (or subclass object) that is being created. This means that the following are equivalent:
TypedArray
.from(
obj
,
mapFn
,
thisArg
)
TypedArray
.from(Array.prototype.map.call(
obj
,
mapFn
,
thisArg
))
.
length
特性为
from()
method is
1
.
Some subtle distinctions between
Array.from()
and
TypedArray
.from()
:
thisArg
value passed to
TypedArray.from()
is not a constructor,
TypedArray.from()
will throw a
TypeError
, where
Array.from()
defaults to creating a new
Array
.
TypedArray.from()
使用
[[Put]]
where
Array.from()
使用
[[DefineProperty]]
. Hence, when working with
Proxy
objects, it calls
handler.set
to create new elements rather than
handler.defineProperty()
.
source
parameter is an iterator, the
TypedArray.from()
first collects all the values from the iterator, then creates an instance of
thisArg
using the count, then sets the values on the instance.
Array.from()
sets each value as it receives them from the iterator, then sets its
length
at the end.
Array.from()
gets an array-like which isn't an iterator, it respects holes.
TypedArray.from()
will ensure the result is dense.
You can partially work around this by inserting the following code at the beginning of your scripts, allowing use of much of the functionality of
from()
in implementations that do not natively support it.
if (!Int8Array.__proto__.from) {
(function () {
Int8Array.__proto__.from = function (obj, func, thisObj) {
var typedArrayClass = Int8Array.__proto__;
if(typeof this !== 'function') {
throw new TypeError('# is not a constructor');
}
if (this.__proto__ !== typedArrayClass) {
throw new TypeError('this is not a typed array.');
}
func = func || function (elem) {
return elem;
};
if (typeof func !== 'function') {
throw new TypeError('specified argument is not a function');
}
obj = Object(obj);
if (!obj['length']) {
return new this(0);
}
var copy_data = [];
for(var i = 0; i < obj.length; i++) {
copy_data.push(obj[i]);
}
copy_data = copy_data.map(func, thisObj);
var typed_array = new this(copy_data.length);
for(var i = 0; i < typed_array.length; i++) {
typed_array[i] = copy_data[i];
}
return typed_array;
}
})();
}
const s = new Set([1, 2, 3]); Uint8Array.from(s); // Uint8Array [ 1, 2, 3 ]
Int16Array.from('123');
// Int16Array [ 1, 2, 3 ]
Using an arrow function as the map function to manipulate the elements
Float32Array.from([1, 2, 3], x => x + x); // Float32Array [ 2, 4, 6 ]
Uint8Array.from({length: 5}, (v, k) => k);
// Uint8Array [ 0, 1, 2, 3, 4 ]
| 规范 |
|---|
|
ECMAScript (ECMA-262)
The definition of '%TypedArray%.from' in that specification. |
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
from
|
Chrome 45 | Edge 14 | Firefox 38 | IE No | Opera No | Safari 10 | WebView Android No | Chrome Android No | Firefox Android 38 | Opera Android No | Safari iOS 10 | Samsung Internet Android No | nodejs 4.0.0 |
完整支持
不支持
TypedArray
TypedArray.from()
TypedArray.of()
TypedArray.prototype.copyWithin()
TypedArray.prototype.entries()
TypedArray.prototype.every()
TypedArray.prototype.fill()
TypedArray.prototype.filter()
TypedArray.prototype.find()
TypedArray.prototype.findIndex()
TypedArray.prototype.forEach()
TypedArray.prototype.includes()
TypedArray.prototype.indexOf()
TypedArray.prototype.join()
TypedArray.prototype.keys()
TypedArray.prototype.lastIndexOf()
TypedArray.prototype.map()
TypedArray.prototype.reduce()
TypedArray.prototype.reduceRight()
TypedArray.prototype.reverse()
TypedArray.prototype.set()
TypedArray.prototype.slice()
TypedArray.prototype.some()
TypedArray.prototype.sort()
TypedArray.prototype.subarray()
TypedArray.prototype.toLocaleString()
TypedArray.prototype.toString()
TypedArray.prototype.values()
TypedArray.prototype[@@iterator]()
Int8Array
Uint8Array
Uint8ClampedArray
Int16Array
Uint16Array
Int32Array
Uint32Array
Float32Array
Float64Array
BigInt64Array
BigUint64Array
Function
Object
Object.prototype.__defineGetter__()
Object.prototype.__defineSetter__()
Object.prototype.__lookupGetter__()
Object.prototype.__lookupSetter__()
Object.prototype.hasOwnProperty()
Object.prototype.isPrototypeOf()
Object.prototype.propertyIsEnumerable()
Object.prototype.toLocaleString()
Object.prototype.toSource()
Object.prototype.toString()
Object.prototype.valueOf()
Object.setPrototypeOf()