Named typed tuple.
We believe in a future in which the web is a preferred environment for numerical computation. To help realize this future, we’ve built stdlib. stdlib is a standard library, with an emphasis on numerical and scientific computation, written in JavaScript (and C) for execution in browsers and in Node.js.
The library is fully decomposable, being architected in such a way that you can swap out and mix and match APIs and functionality to cater to your exact preferences and use cases.
When you use stdlib, you can be absolutely certain that you are using the most thorough, rigorous, well-written, studied, documented, tested, measured, and high-quality code out there.
To join us in bringing numerical computing to the web, get started by checking us out on GitHub, and please consider financially supporting stdlib. We greatly appreciate your continued support!
[![NPM version][npm-image]][npm-url] [![Build Status][test-image]][test-url] [![Coverage Status][coverage-image]][coverage-url]
Create a factory for generating named typed tuples.
bash
npm install @stdlib/utils-named-typed-tuple
script
tag without installation and bundlers, use the [ES Module][es-module] available on the [esm
][esm-url] branch (see [README][esm-readme]).deno
][deno-url] branch (see [README][deno-readme] for usage intructions).umd
][umd-url] branch (see [README][umd-readme]).javascript
var namedtypedtuple = require( '@stdlib/utils-named-typed-tuple' );
javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
var x = tuple.x;
// returns 1.0
x = tuple[ 0 ];
// returns 1.0
var y = tuple.y;
// returns -1.0
y = tuple[ 1 ];
// returns -1.0
options
:float64
: double-precision floating-point numbers (IEEE 754).float32
: single-precision floating-point numbers (IEEE 754).int32
: 32-bit two’s complement signed integers.uint32
: 32-bit unsigned integers.int16
: 16-bit two’s complement signed integers.uint16
: 16-bit unsigned integers.int8
: 8-bit two’s complement signed integers.uint8
: 8-bit unsigned integers.uint8c
: 8-bit unsigned integers clamped to 0-255.'float64'
.'tuple'
.javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory();
var x = tuple.x;
// returns 0.0
x = tuple[ 0 ];
// returns 0.0
var y = tuple.y;
// returns 0.0
y = tuple[ 1 ];
// returns 0.0
javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( 'int32' );
var x = tuple.x;
// returns 0
x = tuple[ 0 ];
// returns 0
var y = tuple.y;
// returns 0
y = tuple[ 1 ];
// returns 0
javascript
var Float64Array = require( '@stdlib/array-float64' );
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( new Float64Array( [ 1.0, -1.0 ] ) );
var x = tuple.x;
// returns 1.0
x = tuple[ 0 ];
// returns 1.0
var y = tuple.y;
// returns -1.0
y = tuple[ 1 ];
// returns -1.0
dtype
.javascript
var Float64Array = require( '@stdlib/array-float64' );
var factory = namedtypedtuple( [ 'x', 'y' ] );
// Cast double-precision floating-point numbers to signed 32-bit integers:
var tuple = factory( new Float64Array( [ 1.0, -1.0 ] ), 'int32' );
var x = tuple.x;
// returns 1
x = tuple[ 0 ];
// returns 1
var y = tuple.y;
// returns -1
y = tuple[ 1 ];
// returns -1
javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
var x = tuple.x;
// returns 1.0
x = tuple[ 0 ];
// returns 1.0
var y = tuple.y;
// returns -1.0
y = tuple[ 1 ];
// returns -1.0
dtype
.javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ], 'int32' );
var x = tuple.x;
// returns 1
x = tuple[ 0 ];
// returns 1
var y = tuple.y;
// returns -1
y = tuple[ 1 ];
// returns -1
ArrayBuffer
][@stdlib/array/buffer] where the view length equals the number of tuple fields.javascript
var ArrayBuffer = require( '@stdlib/array-buffer' );
var factory = namedtypedtuple( [ 'x', 'y' ] );
var buf = new ArrayBuffer( 32 );
// Create a tuple view of the first 16 bytes (8 bytes per double):
var tuple = factory( buf );
var x = tuple.x;
// returns 0.0
x = tuple[ 0 ];
// returns 0.0
var y = tuple.y;
// returns 0.0
y = tuple[ 1 ];
// returns 0.0
// Create a tuple view of the last 16 bytes:
tuple = factory( buf, 16 );
x = tuple.x;
// returns 0.0
x = tuple[ 0 ];
// returns 0.0
y = tuple.y;
// returns 0.0
y = tuple[ 1 ];
// returns 0.0
dtype
.javascript
var ArrayBuffer = require( '@stdlib/array-buffer' );
var factory = namedtypedtuple( [ 'x', 'y' ] );
var buf = new ArrayBuffer( 16 );
// Create a tuple view of the first 8 bytes (4 bytes per float):
var tuple = factory( buf, 'float32' );
var x = tuple.x;
// returns 0.0
x = tuple[ 0 ];
// returns 0.0
var y = tuple.y;
// returns 0.0
y = tuple[ 1 ];
// returns 0.0
// Create a tuple view of the last 8 bytes:
tuple = factory( buf, 8, 'float32' );
x = tuple.x;
// returns 0.0
x = tuple[ 0 ];
// returns 0.0
y = tuple.y;
// returns 0.0
y = tuple[ 1 ];
// returns 0.0
object
or an iterable.javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory.from( [ 1.0, -1.0 ] );
var x = tuple.x;
// returns 1.0
x = tuple[ 0 ];
// returns 1.0
var y = tuple.y;
// returns -1.0
y = tuple[ 1 ];
// returns -1.0
src
value, provide a callback function.A callback function is provided three arguments:
- `value`: source value.
- `index`: source index.
- `field`: tuple field.
To set the callback execution context, provide a `thisArg`.
javascript<a name="static-method-from-object"></a>
#### factory.fromObject( obj\[, map\[, thisArg]] )
Creates a new named typed tuple from an `object` containing tuple fields.
javascriptTo invoke a function for each `src` object tuple field, provide a callback function.
javascriptA callback function is provided two arguments:
- `value`: source object tuple field value.
- `field`: source object tuple field name.
To set the callback execution context, provide a `thisArg`.
javascript<a name="static-method-of"></a>
#### factory.of( element0\[, element1\[, ...elementN]] )
Creates a new named typed tuple from a variable number of arguments.
javascriptjavascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
var nbytes = tuple.BYTES_PER_ELEMENT;
// returns 8
javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
var buf = tuple.buffer;
// returns <ArrayBuffer>
javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
var nbytes = tuple.byteLength;
// returns 16
ArrayBuffer
][@stdlib/array/buffer].javascript
var ArrayBuffer = require( '@stdlib/array-buffer' );
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
var offset = tuple.byteOffset;
// returns 0
var buf = new ArrayBuffer( 64 );
tuple = factory( buf, 32 );
offset = tuple.byteOffset;
// returns 32
javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
var len = tuple.length;
// returns 2
javascript
// Create a tuple factory which generates tuples having the default tuple name:
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
var n = tuple.name;
// returns 'tuple'
// Create a tuple factory which generates tuples having a custom tuple name:
var opts = {
'name': 'Point'
};
factory = namedtypedtuple( [ 'x', 'y' ], opts );
tuple = factory( [ 1.0, -1.0 ] );
n = tuple.name;
// returns 'Point'
javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
var fields = tuple.fields;
// returns [ 'x', 'y' ]
javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
// Sort tuple elements in ascending order:
tuple.sort();
// Get the list of tuple fields:
var fields = tuple.fields;
// returns [ 'x', 'y' ]
// Get the list of tuple fields in index order:
fields = tuple.orderedFields;
// returns [ 'y', 'x' ]
start
and ending at end
(non-inclusive) to the position starting at target
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z', 'w', 'v' ] );
var tuple = factory( [ 2.0, -2.0, 1.0, -1.0, 1.0 ] );
var x = tuple.x;
// returns 2.0
var y = tuple.y;
// returns -2.0
// Copy the last two elements to the first two elements:
tuple.copyWithin( 0, 3 );
x = tuple.x;
// returns -1.0
y = tuple.y;
// returns 1.0
end
equals the number of tuple elements (i.e., one more than the last tuple index). To limit the sequence length, provide an end
argument.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z', 'w', 'v' ] );
var tuple = factory( [ 2.0, -2.0, 1.0, -1.0, 1.0 ] );
var w = tuple.w;
// returns -1.0
var v = tuple.v;
// returns 1.0
// Copy the first two elements to the last two elements:
tuple.copyWithin( 3, 0, 2 );
w = tuple.w;
// returns 2.0
v = tuple.v;
// returns -2.0
target
, start
, and/or end
index is negative, the respective index is determined relative to the last tuple element. The following example achieves the same behavior as the previous example:javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z', 'w', 'v' ] );
var tuple = factory( [ 2.0, -2.0, 1.0, -1.0, 1.0 ] );
var w = tuple.w;
// returns -1.0
var v = tuple.v;
// returns 1.0
// Copy the first two elements to the last two elements:
tuple.copyWithin( -2, -5, -3 );
w = tuple.w;
// returns 2.0
v = tuple.v;
// returns -2.0
javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
// Create an iterator:
var it = tuple.entries();
// Iterate over key-value pairs...
var v = it.next().value;
// returns [ 0, 'x', 1.0 ]
v = it.next().value;
// returns [ 1, 'y', -1.0 ]
var bool = it.next().done;
// returns true
predicate
function.javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
function predicate( v ) {
return ( v >= 0.0 );
}
var bool = tuple.every( predicate );
// returns false
predicate
function is provided four arguments:value
: tuple element.index
: tuple index.field
: tuple field name.tuple
: tuple on which the method is invoked.thisArg
.javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, 1.0 ] );
function predicate( v ) {
this.count += 1;
return ( v >= 0.0 );
}
var ctx = {
'count': 0
};
var bool = tuple.every( predicate, ctx );
// returns true
var n = ctx.count;
// returns 2
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var field = tuple.fieldOf( -1.0 );
// returns 'z'
field = tuple.fieldOf( 2.0 );
// returns undefined
fromIndex = 0
). To begin searching from a specific tuple index, provide a fromIndex
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var field = tuple.fieldOf( 1.0, 1 );
// returns undefined
fromIndex
is negative, the starting index is resolved relative to the last tuple element.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var field = tuple.fieldOf( 1.0, -2 );
// returns undefined
start
index to an end
index (non-inclusive) with a provided value
.javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory();
// Set all tuple elements to the same value:
tuple.fill( 2.0 );
var x = tuple.x;
// returns 2.0
var y = tuple.y;
// returns 2.0
// Set all tuple elements starting from the first index to the same value:
tuple.fill( 3.0, 1 );
x = tuple.x;
// returns 2.0
y = tuple.y;
// returns 3.0
// Set all tuple elements, except the last element, to the same value:
tuple.fill( 4.0, 0, tuple.length-1 );
x = tuple.x;
// returns 4.0
y = tuple.y;
// returns 3.0
start
and/or end
index is negative, the respective index is determined relative to the last tuple element.javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory();
// Set all tuple elements, except the last element, to the same value:
tuple.fill( 2.0, -tuple.length, -1 );
var x = tuple.x;
// returns 2.0
var y = tuple.y;
// returns 0.0
predicate
function returns a truthy value.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var p1 = factory( [ 1.0, 0.0, -1.0 ] );
function predicate( v ) {
return ( v >= 0.0 );
}
var p2 = p1.filter( predicate );
var f = p2.fields;
// returns [ 'x', 'y' ]
predicate
function does not return a truthy value for any tuple element, the method returns null
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var p1 = factory( [ 1.0, 0.0, -1.0 ] );
function predicate( v ) {
return ( v >= 10.0 );
}
var p2 = p1.filter( predicate );
// returns null
predicate
function is provided four arguments:value
: tuple element.index
: tuple index.field
: tuple field name.tuple
: tuple on which the method is invoked.thisArg
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var p1 = factory( [ 1.0, 0.0, -1.0 ] );
function predicate( v ) {
this.count += 1;
return ( v >= 0.0 );
}
var ctx = {
'count': 0
};
var p2 = p1.filter( predicate, ctx );
var n = ctx.count;
// returns 3
predicate
function returns a truthy value.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
function predicate( v ) {
return ( v < 0.0 );
}
var v = tuple.find( predicate );
// returns -1.0
predicate
function does not return a truthy value for any tuple element, the method returns undefined
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
function predicate( v ) {
return ( v < -10.0 );
}
var v = tuple.find( predicate );
// returns undefined
predicate
function is provided four arguments:value
: tuple element.index
: tuple index.field
: tuple field name.tuple
: tuple on which the method is invoked.thisArg
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
function predicate( v ) {
this.count += 1;
return ( v < 0.0 );
}
var ctx = {
'count': 0
};
var v = tuple.find( predicate, ctx );
// returns -1.0
var n = ctx.count;
// returns 3
predicate
function returns a truthy value.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
function predicate( v ) {
return ( v < 0.0 );
}
var field = tuple.findField( predicate );
// returns 'z'
predicate
function does not return a truthy value for any tuple element, the method returns undefined
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
function predicate( v ) {
return ( v < -10.0 );
}
var field = tuple.findField( predicate );
// returns undefined
predicate
function is provided four arguments:value
: tuple element.index
: tuple index.field
: tuple field name.tuple
: tuple on which the method is invoked.thisArg
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
function predicate( v ) {
this.count += 1;
return ( v < 0.0 );
}
var ctx = {
'count': 0
};
var field = tuple.findField( predicate, ctx );
// returns 'z'
var n = ctx.count;
// returns 3
predicate
function returns a truthy value.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
function predicate( v ) {
return ( v < 0.0 );
}
var idx = tuple.findIndex( predicate );
// returns 2
predicate
function does not return a truthy value for any tuple element, the method returns -1
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
function predicate( v ) {
return ( v < -10.0 );
}
var idx = tuple.findIndex( predicate );
// returns -1
predicate
function is provided four arguments:value
: tuple element.index
: tuple index.field
: tuple field name.tuple
: tuple on which the method is invoked.thisArg
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
function predicate( v ) {
this.count += 1;
return ( v < 0.0 );
}
var ctx = {
'count': 0
};
var idx = tuple.findIndex( predicate, ctx );
// returns 2
var n = ctx.count;
// returns 3
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ], 'int32' );
var str = '';
function fcn( v, i, f ) {
str += f + '=' + v;
if ( i < tuple.length-1 ) {
str += ' ';
}
}
tuple.forEach( fcn );
console.log( str );
// => 'x=1 y=0 z=-1'
value
: tuple element.index
: tuple index.field
: tuple field name.tuple
: tuple on which the method is invoked.thisArg
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ], 'int32' );
function fcn() {
this.count += 1;
}
var ctx = {
'count': 0
};
tuple.forEach( fcn, ctx );
var n = ctx.count;
// returns 3
boolean
indicating whether a tuple includes a search element.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var bool = tuple.includes( -1.0 );
// returns true
bool = tuple.includes( 2.0 );
// returns false
fromIndex = 0
). To begin searching from a specific tuple index, provide a fromIndex
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var bool = tuple.includes( 1.0, 1 );
// returns false
fromIndex
is negative, the starting index is resolved relative to the last tuple element.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var bool = tuple.includes( 1.0, -2 );
// returns false
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var idx = tuple.indexOf( -1.0 );
// returns 2
idx = tuple.indexOf( 2.0 );
// returns -1
fromIndex = 0
). To begin searching from a specific tuple index, provide a fromIndex
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var idx = tuple.indexOf( 1.0, 1 );
// returns -1
fromIndex
is negative, the starting index is resolved relative to the last tuple element.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var idx = tuple.indexOf( 1.0, -2 );
// returns -1
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var field = tuple.ind2key( 1 );
// returns 'y'
field = tuple.ind2key( 100 );
// returns undefined
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var field = tuple.ind2key( -2 );
// returns 'y'
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ], 'int32' );
var str = tuple.join();
// returns '1,0,-1'
,
. To specify a custom separator, provide a separator
string.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ], 'int32' );
var str = tuple.join( '|' );
// returns '1|0|-1'
javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
// Create an iterator:
var it = tuple.keys();
// Iterate over keys...
var v = it.next().value;
// returns [ 0, 'x' ]
v = it.next().value;
// returns [ 1, 'y' ]
var bool = it.next().done;
// returns true
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var idx = tuple.key2ind( 'y' );
// returns 1
idx = tuple.key2ind( 'foo' );
// returns -1
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z', 'w', 'v' ] );
var tuple = factory( [ 1.0, 0.0, -1.0, 0.0, 1.0 ] );
var field = tuple.lastFieldOf( 0.0 );
// returns 'w'
field = tuple.lastFieldOf( 2.0 );
// returns undefined
fromIndex = -1
). To begin searching from a specific tuple index, provide a fromIndex
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z', 'w', 'v' ] );
var tuple = factory( [ 1.0, 0.0, -1.0, 0.0, 1.0 ] );
var field = tuple.lastFieldOf( 0.0, 2 );
// returns 'y'
fromIndex
is negative, the starting index is resolved relative to the last tuple element.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z', 'w', 'v' ] );
var tuple = factory( [ 1.0, 0.0, -1.0, 0.0, 1.0 ] );
var field = tuple.lastFieldOf( 0.0, -3 );
// returns 'y'
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z', 'w', 'v' ] );
var tuple = factory( [ 1.0, 0.0, -1.0, 0.0, 1.0 ] );
var idx = tuple.lastIndexOf( 0.0 );
// returns 3
idx = tuple.lastIndexOf( 2.0 );
// returns -1
fromIndex = -1
). To begin searching from a specific tuple index, provide a fromIndex
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z', 'w', 'v' ] );
var tuple = factory( [ 1.0, 0.0, -1.0, 0.0, 1.0 ] );
var idx = tuple.lastIndexOf( 0.0, 2 );
// returns 1
fromIndex
is negative, the starting index is resolved relative to the last tuple element.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z', 'w', 'v' ] );
var tuple = factory( [ 1.0, 0.0, -1.0, 0.0, 1.0 ] );
var idx = tuple.lastIndexOf( 0.0, -3 );
// returns 1
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var p1 = factory( [ 1.0, 0.0, -1.0 ] );
function fcn( v ) {
return v * 2.0;
}
var p2 = p1.map( fcn );
var x = p2.x;
// returns 2.0
var y = p2.y;
// returns 0.0
var z = p2.z;
// returns -2.0
value
: tuple element.index
: tuple index.field
: tuple field name.tuple
: tuple on which the method is invoked.thisArg
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var p1 = factory( [ 1.0, 0.0, -1.0 ] );
function fcn( v ) {
this.count += 1;
return v * 2.0;
}
var ctx = {
'count': 0
};
var p2 = p1.map( fcn, ctx );
var n = ctx.count;
// returns 3
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 2.0, 0.0, -3.0 ] );
function fcn( acc, v ) {
return acc + ( v*v );
}
var v = tuple.reduce( fcn );
// returns 11.0
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 2.0, 0.0, -3.0 ] );
function fcn( acc, v ) {
return acc + ( v*v );
}
var v = tuple.reduce( fcn, 0.0 );
// returns 13.0
acc
: accumulated result.value
: tuple element.index
: tuple index.field
: tuple field name.tuple
: tuple on which the method is invoked.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 2.0, 0.0, -3.0 ] );
function fcn( acc, v ) {
return acc + ( v*v );
}
var v = tuple.reduceRight( fcn );
// returns 1.0
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 2.0, 0.0, -3.0 ] );
function fcn( acc, v ) {
return acc + ( v*v );
}
var v = tuple.reduceRight( fcn, 0.0 );
// returns 13.0
acc
: accumulated result.value
: tuple element.index
: tuple index.field
: tuple field name.tuple
: tuple on which the method is invoked.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 2.0, 0.0, -3.0 ] );
var x = tuple[ 0 ];
// returns 2.0
x = tuple.x;
// returns 2.0
// Reverse the tuple:
tuple.reverse();
var fields = tuple.orderedFields;
// returns [ 'z', 'y', 'x' ]
var z = tuple[ 0 ];
// returns -3.0
// Tuple field assignments do NOT change:
x = tuple.x;
// returns 2.0
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var y = tuple[ 1 ];
// returns 0.0
y = tuple.y;
// returns 0.0
// Set the first two tuple elements:
tuple.set( [ -2.0, 2.0 ] );
var x = tuple[ 0 ];
// returns -2.0
x = tuple.x;
// returns -2.0
y = tuple[ 1 ];
// returns 2.0
y = tuple.y;
// returns 2.0
offset
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var y = tuple[ 1 ];
// returns 0.0
y = tuple.y;
// returns 0.0
// Set the last two tuple elements:
tuple.set( [ -2.0, 2.0 ], 1 );
var x = tuple[ 0 ];
// returns 1.0
x = tuple.x;
// returns 1.0
y = tuple[ 1 ];
// returns -2.0
y = tuple.y;
// returns -2.0
var z = tuple[ 2 ];
// returns 2.0
z = tuple.z;
// returns 2.0
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var p1 = factory( [ 1.0, 0.0, -1.0 ] );
var p2 = p1.slice();
var bool = ( p1 === p2 );
// returns false
bool = ( p1.buffer === p2.buffer );
// returns false
var x = p2.x;
// returns 1.0
var y = p2.y;
// returns 0.0
var z = p2.z;
// returns -1.0
begin
index (inclusive).javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var p1 = factory( [ 1.0, 0.0, -1.0 ] );
var p2 = p1.slice( 1 );
var fields = p2.fields;
// returns [ 'y', 'z' ]
var y = p2.y;
// returns 0.0
var z = p2.z;
// returns -1.0
begin
. To specify an alternative tuple index at which to end copying, provide an end
index (exclusive).javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var p1 = factory( [ 1.0, 0.0, -1.0 ] );
var p2 = p1.slice( 0, 2 );
var fields = p2.fields;
// returns [ 'x', 'y' ]
var x = p2.x;
// returns 1.0
var y = p2.y;
// returns 0.0
begin
and/or end
index is negative, the respective index is determined relative to the last tuple element.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var p1 = factory( [ 1.0, 0.0, -1.0 ] );
var p2 = p1.slice( -p1.length, -1 );
var fields = p2.fields;
// returns [ 'x', 'y' ]
var x = p2.x;
// returns 1.0
var y = p2.y;
// returns 0.0
predicate
function.javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
function predicate( v ) {
return ( v < 0.0 );
}
var bool = tuple.some( predicate );
// returns true
predicate
function is provided four arguments:value
: tuple element.index
: tuple index.field
: tuple field name.tuple
: tuple on which the method is invoked.thisArg
.javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, 1.0 ] );
function predicate( v ) {
this.count += 1;
return ( v < 0.0 );
}
var ctx = {
'count': 0
};
var bool = tuple.some( predicate, ctx );
// returns false
var n = ctx.count;
// returns 2
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 2.0, -3.0, 0.0 ] );
var x = tuple[ 0 ];
// returns 2.0
x = tuple.x;
// returns 2.0
// Sort the tuple (in ascending order):
tuple.sort();
var fields = tuple.orderedFields;
// returns [ 'y', 'z', 'x' ]
var y = tuple[ 0 ];
// returns -3.0
// Tuple field assignments do NOT change:
x = tuple.x;
// returns 0.0
compareFunction
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 2.0, -3.0, 0.0 ] );
var x = tuple[ 0 ];
// returns 2.0
x = tuple.x;
// returns 2.0
function descending( a, b ) {
return b - a;
}
// Sort the tuple (in descending order):
tuple.sort( descending );
var fields = tuple.orderedFields;
// returns [ 'x', 'z', 'y' ]
var z = tuple[ 1 ];
// returns 0.0
// Tuple field assignments do NOT change:
var y = tuple.y;
// returns -3.0
a
and b
, per invocation, and its return value determines the sort order as follows:a
to an index lower than b
(i.e., a
should come before b
).a
to an index higher than b
(i.e., b
should come before a
).a
and b
_should remain unchanged.ArrayBuffer
][@stdlib/array/buffer] and with the same underlying data type as the host tuple.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var arr = tuple.subarray();
// returns <Float64Array>[ 1.0, 0.0, -1.0 ]
begin
index (inclusive).javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var arr = tuple.subarray( 1 );
// returns <Float64Array>[ 0.0, -1.0 ]
begin
. To limit the number of tuple elements after begin
, provide an end
index (exclusive).javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var arr = tuple.subarray( 0, 2 );
// returns <Float64Array>[ 1.0, 0.0 ]
begin
and/or end
index is negative, the respective index is determined relative to the last tuple element.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var arr = tuple.subarray( -tuple.length, -1 );
// returns <Float64Array>[ 1.0, 0.0 ]
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var arr = tuple.subarray( 10, -1 );
// returns <Float64Array>[]
ArrayBuffer
][@stdlib/array/buffer] and with the same underlying data type as the host tuple.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var p1 = factory( [ 1.0, 0.0, -1.0 ] );
var p2 = p1.subtuple();
var bool = ( p1 === p2 );
// returns false
bool = ( p1.buffer === p2.buffer );
// returns true
var len = p2.length;
// returns 3
var x = p2.x;
// returns 1.0
var y = p2.y;
// returns 0.0
var z = p2.z;
// returns -1.0
begin
index (inclusive).javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var p1 = factory( [ 1.0, 0.0, -1.0 ] );
var p2 = p1.subtuple( 1 );
var len = p2.length;
// returns 2
var fields = p2.fields;
// returns [ 'y', 'z' ]
var y = p2.y;
// returns 0.0
var z = p2.z;
// returns -1.0
begin
. To limit the number of tuple elements after begin
, provide an end
index (exclusive).javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var p1 = factory( [ 1.0, 0.0, -1.0 ] );
var p2 = p1.subtuple( 0, 2 );
var len = p2.length;
// returns 2
var fields = p2.fields;
// returns [ 'x', 'y' ]
var x = p2.x;
// returns 1.0
var y = p2.y;
// returns 0.0
begin
and/or end
index is negative, the respective index is determined relative to the last tuple element.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var p1 = factory( [ 1.0, 0.0, -1.0 ] );
var p2 = p1.subtuple( -p1.length, -1 );
var len = p2.length;
// returns 2
var fields = p2.fields;
// returns [ 'x', 'y' ]
var x = p2.x;
// returns 1.0
var y = p2.y;
// returns 0.0
null
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var p1 = factory( [ 1.0, 0.0, -1.0 ] );
var p2 = p1.subtuple( 10, -1 );
// returns null
javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ] );
var obj = tuple.toJSON();
// returns { 'x': 1.0, 'y': 0.0, 'z': -1.0 }
string
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ], 'int32' );
var str = tuple.toLocaleString();
// returns '1,0,-1'
string
.javascript
var factory = namedtypedtuple( [ 'x', 'y', 'z' ] );
var tuple = factory( [ 1.0, 0.0, -1.0 ], 'int32' );
var str = tuple.toString();
// returns 'tuple(x=1, y=0, z=-1)'
string
uses the tuple name
as specified when creating a tuple factory.javascript
var opts = {
'name': 'Point'
};
var factory = namedtypedtuple( [ 'x', 'y', 'z' ], opts );
var tuple = factory( [ 1.0, 0.0, -1.0 ], 'int32' );
var str = tuple.toString();
// returns 'Point(x=1, y=0, z=-1)'
javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
// Create an iterator:
var it = tuple.values();
// Iterate over tuple elements...
var v = it.next().value;
// returns 1.0
v = it.next().value;
// returns -1.0
var bool = it.next().done;
// returns true
Object.freeze()
on returned tuples.javascript
var factory = namedtypedtuple( [ 'x', 'y' ] );
var tuple = factory( [ 1.0, -1.0 ] );
// Make the tuple immutable:
tuple = Object.freeze( tuple );
tuple.fields
.javascript
var namedtypedtuple = require( '@stdlib/utils-named-typed-tuple' );
var fields = [ 'x', 'y' ];
var opts = {
'name': 'Point'
};
var Point = namedtypedtuple( fields, opts );
var p = new Point( [ 1.0, -1.0 ] );
// Tuple elements can be accessed by index or name:
var x = p[ 0 ];
// returns 1.0
x = p.x;
// returns 1.0
var y = p[ 1 ];
// returns -1.0
y = p.y;
// returns -1.0
// Sort tuple elements while retaining name access:
p.sort();
console.log( 'p[0]=%d, p[1]=%d, x=%d, y=%d', p[ 0 ], p[ 1 ], p.x, p.y );
// Retrieve the tuple fields in index order:
console.log( p.orderedFields );
// => [ 'y', 'x' ]
// Serialize the tuple as a string:
console.log( p.toString() );
// Serialize the tuple a JSON string:
console.log( JSON.stringify( p ) );