filter【抽出生成】
map【配列変換生成】
slice【部分コピー】
subarray【部分ビュー】
%TypedArray%.prototype.filter【抽出生成】
メモ
概要
- コールバック関数で有効な要素を抽出し、新しい%TypedArray%【型指定配列ビュー】オブジェクトを生成
- 有効判定のみ:
- 要素の変換:map【配列変換生成】
- 検索
関連
外部リンク
- ECMA-262 (英語)
%TypedArray%.prototype.filter ( callbackfn [ , thisArg ] ) ES2024 (15) ES2023 (14) ES2022 (13)
構文
typedArray.filter( callbackfn [, thisArg ] )
新規生成された %TypedArray%【型指定配列ビュー】オブジェクト (抽出生成用コールバック関数の戻り値が true の要素のみ)
callbackfn 抽出生成用コールバック関数 (詳細は下記参照)
thisArg 抽出生成用コールバック関数内でthis で参照されるオブジェクト
TypeError callbackfn が呼び出し可能な関数オブジェクト以外
callbackfn (抽出生成用コールバック関数)
引数名 (例) | 説明 |
---|---|
value | 要素値 |
index | 要素インデックス |
typedArray | %TypedArray%【型指定配列ビュー】オブジェクト |
戻り値型 | 説明 |
Boolean型 | true:有効な要素 false:無効な要素 |
例
/**
* filter 用コールバック関数 (判定値 this 以上を抽出)
* @param {number} value 要素値
* @param {number} index 要素インデックス
* @param {Int32Array} typedArray %TypedArray%【型指定配列ビュー】オブジェクト
* @return {boolean} true:抽出対象要素 / false:抽出対象要素以外
*/
function filterFunc(value, index, typedArray) {
console.log("filterFunc()", index, value);
return (this <= value);
}
var array = [ 1, -2, 3, -4, 5 ];
var typedArray = new Int32Array(array);
var typedArray_0 = typedArray.filter(filterFunc, 0);
console.log(typedArray_0[Symbol.toStringTag], typedArray_0);
// 出力:filterFunc() 0 1
// 出力:filterFunc() 1 -2
// 出力:filterFunc() 2 3
// 出力:filterFunc() 3 -4
// 出力:filterFunc() 4 5
// 出力:Int32Array [1, 3, 5]
var typedArray_3 = typedArray.filter(filterFunc, 3);
console.log(typedArray_3[Symbol.toStringTag], typedArray_3);
// 出力:filterFunc() 0 1
// 出力:filterFunc() 1 -2
// 出力:filterFunc() 2 3
// 出力:filterFunc() 3 -4
// 出力:filterFunc() 4 5
// 出力:Int32Array [3, 5]
// 生成されたビューは別配列
typedArray[2] = 100;
typedArray_0[1] = 200;
console.log(typedArray);
// 出力:[1, -2, 100, -4, 5]
console.log(typedArray_0);
// 出力:[1, 200, 5]
console.log(typedArray_3);
// 出力:[3, 5]
%TypedArray%.prototype.map【配列変換生成】
メモ
概要
- 各要素をコールバック関数で変換処理し、新規に%TypedArray%【型指定配列ビュー】オブジェクトを生成
関連
外部リンク
- ECMA-262 (英語)
%TypedArray%.prototype.map ( callbackfn [ , thisArg ] ) ES2024 (15) ES2023 (14) ES2022 (13)
構文
typedArray.map( callbackfn [, thisArg ] )
新規生成された %TypedArray%【型指定配列ビュー】オブジェクト
callbackfn コールバック関数 (詳細は下記参照)
thisArg コールバック関数内でthis で参照されるオブジェクト
TypeError callbackfn が呼び出し可能な関数オブジェクト以外
callbackfn (コールバック関数)
引数名 (例) | 説明 |
---|---|
value | 要素値 |
index | 要素インデックス |
typedArray | %TypedArray%【型指定配列ビュー】オブジェクト |
戻り値型 | 説明 |
要素の型 | 変換後の要素値 |
例
/**
* map 用コールバック関数 (乗数 this 倍)
* @param {number} value 要素値
* @param {number} index 要素インデックス
* @param {Int32Array} typedArray %TypedArray%【型指定配列ビュー】オブジェクト
* @return {Int32Array} 変換後の要素値
*/
function mapFunc(value, index, typedArray) {
console.log("mapFunc()", index, value);
return value * this;
}
var array = [ 1, -2, 3, -4, 5 ];
var typedArray = new Int32Array(array);
var typedArray_2 = typedArray.map(mapFunc, 2);
console.log(typedArray_2[Symbol.toStringTag], typedArray_2);
// 出力:mapFunc() 0 1
// 出力:mapFunc() 1 -2
// 出力:mapFunc() 2 3
// 出力:mapFunc() 3 -4
// 出力:mapFunc() 4 5
// 出力:Int32Array [2, -4, 6, -8, 10]
var typedArray_3 = typedArray.map(mapFunc, 3);
console.log(typedArray_3[Symbol.toStringTag], typedArray_3);
// 出力:mapFunc() 0 1
// 出力:mapFunc() 1 -2
// 出力:mapFunc() 2 3
// 出力:mapFunc() 3 -4
// 出力:mapFunc() 4 5
// 出力:Int32Array [3, -6, 9, -12, 15]
%TypedArray%.prototype.slice【部分コピー】
メモ
概要
- %TypedArray%【型指定配列ビュー】オブジェクトをコピーし新規生成 (実体もコピー)
- Array【配列】オブジェクトのslice【部分コピー】に類似
- 開始要素位置を0、終了要素位置を省略すれば全コピー
- 実体の共有
関連
外部リンク
- ECMA-262 (英語)
%TypedArray%.prototype.slice ( start, end ) ES2024 (15) ES2023 (14) ES2022 (13)
構文
typedArray.slice( start [, end ] )
新規生成された %TypedArray%【型指定配列ビュー】オブジェクト
start 開始要素位置 (詳細は下記参照)
end 終了要素位置 (この位置の要素は含まない:詳細は下記参照)
start (開始要素位置)
end (終了要素位置)
start | 説明 |
---|---|
0 ≦ start | 先頭からの要素位置 (要素数<start:要素数に補正) |
start < 0 | 末尾からの要素位置 (-1:末尾) |
end | 説明 |
---|---|
省略 | 末尾まで (要素数:末尾+1) |
0 ≦ end | 先頭からの要素位置 (要素数 < end:要素数に補正) |
end < 0 | 末尾からの要素位置 (-1:末尾) |
例
var array = [ 1, -2, 3, -4, 5 ];
var typedArray = new Int32Array(array);
console.log(typedArray);
// 出力:[1, -2, 3, -4, 5]
// 出力:全コピー
var typedArrayCopy = typedArray.slice(0);
console.log(typedArrayCopy);
// 出力:[1, -2, 3, -4, 5]
console.log(typedArrayCopy === typedArray);
// 出力:false 別のビュー
console.log(typedArrayCopy.buffer === typedArray.buffer);
// 出力:false 別の実体
typedArrayCopy[0] = 100;
console.log(typedArrayCopy);
// 出力:[100, -2, 3, -4, 5]
console.log(typedArray);
// 出力:[1, -2, 3, -4, 5]
// 出力:違う範囲のビュー生成
var typedArrayCopy2 = typedArray.slice(1, 4);
console.log(typedArrayCopy2);
// 出力:[-2, 3, -4]
console.log(typedArrayCopy2 === typedArray);
// 出力:false 別のビュー
console.log(typedArrayCopy2.buffer === typedArray.buffer);
// 出力:false 別の実体
// 出力:末尾からの範囲指定のビュー生成
var typedArrayCopy3 = typedArray.slice(1, -2);
console.log(typedArrayCopy3);
// 出力:[-2, 3]
console.log(typedArrayCopy3 === typedArray);
// 出力:false 別のビュー
console.log(typedArrayCopy3.buffer === typedArray.buffer);
// 出力:false 別の実体
%TypedArray%.prototype.subarray【部分ビュー】
メモ
概要
- 同一の実体 (ArrayBuffer【バイナリデータ配列】オブジェクト)に対して、別のビューを生成
- 開始要素位置を0、終了要素位置を省略すれば同じ範囲のビューを生成
- 別の実体を生成:slice【部分コピー】
関連
外部リンク
- ECMA-262 (英語)
%TypedArray%.prototype.subarray ( begin, end ) ES2024 (15) ES2023 (14) ES2022 (13)
構文
typedArray.subarray( begin [, end ] )
新規生成された %TypedArray%【型指定配列ビュー】オブジェクト
begin 開始要素位置 (詳細は下記参照)
end 終了要素位置 (この位置の要素は含まない:詳細は下記参照)
begin (開始要素位置)
end (終了要素位置)
begin | 説明 |
---|---|
0 ≦ begin | 先頭からの要素位置 (要素数 <begin:要素数に補正) |
begin < 0 | 末尾からの要素位置 (-1:末尾) |
end | 説明 |
---|---|
省略 | 末尾まで (要素数:末尾+1) |
0 ≦ end | 先頭からの要素位置 (要素数 < end:要素数に補正) |
end < 0 | 末尾からの要素位置 (-1:末尾) |
例
var array = [ 1, -2, 3, -4, 5 ];
var typedArray = new Int32Array(array);
console.log(typedArray);
// 出力:[1, -2, 3, -4, 5]
// 同じ範囲のビュー生成
var typedArray2 = typedArray.subarray(0);
console.log(typedArray2);
// 出力:[1, -2, 3, -4, 5]
console.log(typedArray === typedArray2);
// 出力:false 別ビュー
console.log(typedArray.buffer === typedArray2.buffer);
// 出力:true 同一実体
typedArray2[0] = 100;
console.log(typedArray);
// 出力:[100, -2, 3, -4, 5]
console.log(typedArray2);
// 出力:[100, -2, 3, -4, 5]
// 違う範囲のビュー生成
var typedArray3 = typedArray.subarray(1, 4);
console.log(typedArray3);
// 出力:[-2, 3, -4]
console.log(typedArray === typedArray3);
// 出力:false 別ビュー
console.log(typedArray.buffer === typedArray3.buffer);
// 出力:true 同一実体
typedArray3[0] = -200;
console.log(typedArray);
// 出力:[100, -200, 3, -4, 5]
console.log(typedArray3);
// 出力:[-200, 3, -4]
// 末尾からの範囲指定のビュー生成
var typedArray4 = typedArray.subarray(1, -2);
console.log(typedArray4);
// 出力:[-200, 3]