filter【抽出生成】メソッド
map【配列変換生成】メソッド
slice【部分コピー】メソッド
subarray【部分ビュー】メソッド
%TypedArray%.prototype.filter【抽出生成】
メモ
- コールバック関数で有効な要素を抽出し、新しい%TypedArray%【型指定配列ビュー】オブジェクトを生成
- Array【配列】オブジェクト のfilter【抽出生成】に類似
- 有効判定のみ:
- every【有効判定 (全要素有効)】
- some【有効判定 (一部要素有効)】
- 要素の変換:map【配列変換生成】
- 検索
構文
filter( callbackfn [ , thisArg ] )
- callbackfn:抽出生成用コールバック関数
引数名 (例) 説明 value 要素値 index 要素インデックス typedArray %TypedArray%【型指定配列ビュー】オブジェクト 戻り値型 説明 Boolean型 true:有効な要素
false:無効な要素 - thisArg:抽出生成用コールバック関数内でthis で参照されるオブジェクト
- 新規生成された %TypedArray%【型指定配列ビュー】オブジェクト (抽出生成用コールバック関数の戻り値が true の要素のみ)
- TypeError 例外:callbackfn が呼び出し可能な関数オブジェクト以外
例
/**
* 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%【型指定配列ビュー】オブジェクトを生成
- Array【配列】オブジェクト のmap【配列変換生成】に類似
構文
map( callbackfn [ , thisArg ] )
- callbackfn:コールバック関数
引数名 (例) 説明 value 要素値 index 要素インデックス typedArray %TypedArray%【型指定配列ビュー】オブジェクト 戻り値型 説明 要素の型 変換後の要素値 - thisArg:コールバック関数内でthis で参照されるオブジェクト
- 新規生成された %TypedArray%【型指定配列ビュー】オブジェクト
- TypeError 例外:callbackfn が呼び出し可能な関数オブジェクト以外
例
/**
* 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%【型指定配列ビュー】オブジェクトをコピーし新規生成 (実体もコピー)
- 実体の共有
- 開始要素位置を0、終了要素位置を省略すれば全コピー
- Array【配列】オブジェクト のslice【部分コピー】に類似
構文
slice( start [, end ] )
- start:開始要素位置
start 説明 0 ≦ 先頭からの要素位置 (要素数 <:要素数) < 0 末尾からの要素位置 (-1:末尾) - end:終了要素位置 (この位置の要素は含まない)
end 説明 省略 末尾まで (要素数:末尾+1) 0 ≦ 先頭からの要素位置 (要素数 <:要素数) < 0 末尾からの要素位置 (-1:末尾)
- 新規生成された %TypedArray%【型指定配列ビュー】オブジェクト
例
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【バイナリデータ配列】オブジェクト)に対して、 別のビューを生成
- 別の実体を生成:slice【部分コピー】
- 開始要素位置を0、終了要素位置を省略すれば同じ範囲のビューを生成
構文
subarray( begin [ , end ] )
- begin:開始要素位置
begin 説明 0 ≦ 先頭からの要素位置 (要素数 <:要素数) < 0 末尾からの要素位置 (-1:末尾) - end:終了要素位置 (この位置の要素は含まない)
end 説明 省略 末尾まで (要素数:末尾+1) 0 ≦ 先頭からの要素位置 (要素数 <:要素数) < 0 末尾からの要素位置 (-1:末尾)
- 新規生成された %TypedArray%【型指定配列ビュー】オブジェクト
例
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]
関連
- ECMAScript 2015 (6) (英語)
- ECMAScript 2016 (7) (英語)