配列の検索
概要
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;
}