TypedArray.prototype.findIndex()

findIndex() メソッドは、typed array 内の要素が与えられたテスト関数を満たす場合、typed array 内のインデックスを返します。さもなければ、-1 が返されます。

find() メソッドも確かめて下さい。そのメソッドは、typed array 内の見つかった要素のインデックスのかわりに を返します。

構文

typedarray.findIndex(callback[, thisArg])

引数

callback
typed array の各要素で実行する関数。3 つの引数を取ります:
element
typed array 内で処理される現在の要素。
index
typed array 内で処理される現在の要素のインデックス。
array
findIndex が呼び出される typed array。
thisArg
オプション。callback を実行するときに this として使用するオブジェクト。

返り値

要素がテストに合格した場合は配列のインデックス。そうでない場合は、-1

説明

findIndex メソッドは callback 関数が true 値を返す要素を見つけるまで typed array 内に存在している各要素に対して一度 callback 関数を実行します。そのような要素が見つかったら、findIndex はすぐに要素のインデックスを返します。さもなければ、findIndex メソッドは -1 を返します。callback は値を割り当てた typed array のインデックスに対してのみ呼び出されます。つまり、削除されたり、値が割り当てられてインデックスに対しては呼び出されません。

callback は 3 つの引数とともに呼び出されます: 要素の値、要素のインデックス、処理される typed array。

thisArg 引数が findIndex に与えられた場合、callback の各呼び出しで this として使用されます。thisArg 引数が与えられない場合、undefined が使用されます。

findIndex メソッドは呼び出される typed array を変更しません。

findIndex によって処理される要素の範囲は、最初に callback が呼び出される前に設定されます。findIndex の呼び出しが始まったあとで typed array に追加された要素は、callback メソッドによって処理されません。存在していて、処理されていない typed array の要素が callback によって変更された場合、処理している callback 関数に渡される値は、findIndex が要素のインデックスを処理する直前の値です; 削除された要素は処理されません。

typed array 内の素数のインデックスを探す

次の例では、typed array 内の素数の要素のインデックスを探します (素数がない場合、-1 を返します)。

function isPrime(element, index, array) {
  var start = 2;
  while (start <= Math.sqrt(element)) {
    if (element % start++ < 1) {
      return false;
    }
  }
  return element > 1;
}

var uint8 = new Uint8Array([4, 6, 8, 12]);
var uint16 = new Uint16Array([4, 6, 7, 12]);

console.log(uint8.findIndex(isPrime)); // -1, not found
console.log(uint16.findIndex(isPrime)); // 2

Polyfill

TypedArray.prototype.findIndex = Array.prototype.findIndex = Array.prototype.findIndex || function(evaluator, thisArg) {
        'use strict';
        if (!this) {
          throw new TypeError('Array.prototype.some called on null or undefined');
        }
    
        if (typeof(evaluator) !== 'function') {
            if (typeof(evaluator) === 'string') {
                // Attempt to convert it to a function
                if ( ! (evaluator = eval(evaluator)) ){
                    throw new TypeError();
                }
            } else {
                throw new TypeError();
            }
        }
        
        var i;
        if (thisArg === undefined) {  // Optimize for thisArg
            for (i in this) {
                if (evaluator(this[i], i, this)) {
                    return i;
                }
            }
            return -1;
        }
        for (i in this) {
            if (evaluator.call(thisArg, this[i], i, this)) {
                return i;
            }
        }
        return -1;
};

仕様

仕様書
ECMAScript (ECMA-262)
%TypedArray%.prototype.findIndex の定義

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
findIndexChrome 完全対応 45Edge 完全対応 14Firefox 完全対応 37IE 未対応 なしOpera 完全対応 32Safari 未対応 なしWebView Android 完全対応 45Chrome Android 完全対応 45Firefox Android 完全対応 37Opera Android 完全対応 32Safari iOS 未対応 なしSamsung Internet Android 完全対応 5.0nodejs 完全対応 4.0.0

凡例

完全対応  
完全対応
未対応  
未対応

関連情報