filter【抽出生成】メソッド
map【配列変換生成】メソッド
slice【部分コピー】メソッド
subarray【部分ビュー】メソッド

%TypedArray%.prototype.filter【抽出生成】

メモ

構文

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【配列変換生成】

メモ

構文

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【部分コピー】

メモ

構文

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【部分ビュー】

メモ

構文

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]

関連