2015.6.12
2020.1.7

配列の検索

概要

JavaScriptで配列に対して検索を行う場合、いくつかの方法があり、いつも「どんな方法があったっけ?」と忘れてしまっていたので、その方法をまとめておきます。

詳細

◆ 存在チェック

 indexOfを使用する場合


var data = ["あいうえお", "かきくけこ", "さしすせそ", "かきくけこ"];

alert( data.indexOf( "かきくけこ" ) !== -1 );		// true
alert( data.indexOf( "らりるれろ" ) !== -1 );		// false

 someを使用する場合


var data = ["あいうえお", "かきくけこ", "さしすせそ", "かきくけこ"];

alert( data.some( function( v ){ return v === "かきくけこ" } ) );		// true
alert( data.some( function( v ){ return v === "らりるれろ" } ) );		// false

 $.inArrayを使用する場合(jQuery使用時のみ)


var data = ["あいうえお", "かきくけこ", "さしすせそ", "かきくけこ"];

alert( $.inArray( "かきくけこ", data ) !== -1 );		// true
alert( $.inArray( "らりるれろ", data ) !== -1 );		// false

 自前の関数を使用する場合


var data = ["あいうえお", "かきくけこ", "さしすせそ", "かきくけこ"];

alert( arrExists( data, "かきくけこ" ) );			// true
alert( arrExists( data, "らりるれろ" ) );			// false

function arrExists( arr, searchValue ){
    for( var i = 0; i < arr.length; i++ ){
        if( arr[i] === searchValue ) return true;;
    }
    return false;
}

◆ インデックス取得

 indexOfを使用する場合


var data = ["あいうえお", "かきくけこ", "さしすせそ", "かきくけこ"];

alert( data.indexOf( "かきくけこ" ) );			// 1
alert( data.indexOf( "かきくけこ", 2 ) );			// 3
alert( data.indexOf( "らりるれろ" ) );			// -1

 $.inArrayを使用する場合(jQuery使用時のみ)


var data = ["あいうえお", "かきくけこ", "さしすせそ", "かきくけこ"];

alert( $.inArray( "かきくけこ", data ) );			// 1
alert( $.inArray( "かきくけこ", data, 2 ) );		// 3
alert( $.inArray( "らりるれろ", data ) );			// -1

 自前の関数を使用する場合


var data = ["あいうえお", "かきくけこ", "さしすせそ", "かきくけこ"];

alert( arrIndex( data, "かきくけこ" ) );			// 1
alert( arrIndex( data, "かきくけこ", 2 ) );		// 3
alert( arrIndex( data, "らりるれろ" ) );			// -1

function arrIndex( arr, searchValue, opt_init ){
    var initIndex = opt_init || 0;
    for( var i = initIndex; i < arr.length; i++ ){
        if( arr[i] === searchValue ) return i;
    }
    return -1;
}

◆ データ抽出

 filterを使用する場合


var data = ["あいうえお", "かきくけこ", "さしすせそ", "かきくけこ"];

var searchedData = data.filter( function( v, i ) {
    return v === "かきくけこ";
});

alert(searchedData.length);				// 2
searchedData.forEach( function( v, i ){
    alert( v );					// 1回目:かきくけこ、2回目:かきくけこ
});

 自前の関数を使用する場合


var data = ["あいうえお", "かきくけこ", "さしすせそ", "かきくけこ"];

var searchedData2 = arrFilter( data, "かきくけこ" );

alert(searchedData2.length);				// 2
searchedData2.forEach( function( v, i ){
    alert( v );					// 1回目:かきくけこ、2回目:かきくけこ
});

function arrFilter( arr, searchValue ){
    var newArr = [];
    for( var i = 0; i < arr.length; i++ ){
        if( arr[i] === searchValue ) newArr.push( arr[i] );
    }
    return newArr;
}

JavaScript】関連記事