ES2015ならArray.prototype.findが使えるので文字通り1行です。
findは対象の要素が見つかった時点で探索を打ち切るので、
パフォーマンスはfor文を回して見つかったらbreak
で逃げるのとほぼ同等です。
対象の要素が見つからない場合はUndefined
になります。
JavaScript
1const objectArray = [
2 { code: 'aaa', data: 'hogehoge' },
3 { code: 'bbb', data: 'hogahoga' },
4 { code: 'ccc', data: 'hugehuge' },
5 { code: 'ddd', data: 'hoguhogu' },
6 { code: 'eee', data: 'hogohogo' }
7];
8const bbbObject = objectArray.find(it => it.code === 'bbb');
9console.log(bbbObject); // {code: "bbb", data: "hogahoga"}
ES5相当のコードしか使えない場合はArray.prototype.filterを使いましょう。
こちらは対応ブラウザーがIE9以降です。
結果は要素があっても無くても配列を返します。
配列の存在しない添字はエラーにならずにUndefined
になりますので、決め打ちで添字0
を取りに行って構いません。
全ての配列を参照するのでパフォーマンスはそれほど高くありませんが、10件程度であればワンライナーで書いた方が良いでしょうね。
もし数千や数万の配列を相手にする場合は素直にfor文を回したり、ソート済みの配列を用意してクイックソートを行う等アルゴリズムレベルで工夫してください。
JavaScript
1var objectArray = [
2 { code: 'aaa', data: 'hogehoge' },
3 { code: 'bbb', data: 'hogahoga' },
4 { code: 'ccc', data: 'hugehuge' },
5 { code: 'ddd', data: 'hoguhogu' },
6 { code: 'eee', data: 'hogohogo' }
7];
8var bbbObject = objectArray.filter(function(it){return it.code === 'bbb'})[0];
9console.log(bbbObject); // {code: "bbb", data: "hogahoga"}
おまけ: 検索結果が見つからず、デフォルト値を用意しておく
or演算子である||
を使うと、JavaScriptの場合、左辺がFalsyならば右辺が得られます。
StringやNumberの配列の場合0や""
がFalse扱いになるので不具合の原因になりますが、Objectの配列とわかっているケースではこの書き方が有効でしょう。
JavaScript
1// ES2015
2const cccObject = objectArray.find(it => it.code === 'zzz') || objectArray[0];
3console.log(cccObject); // {code: "aaa", data: "hogehoge"}
4
5// ES5
6var cccObject = objectArray.filter(function(it){return it.code === 'zzz'})[0] || objectArray[0];
7console.log(cccObject); // {code: "aaa", data: "hogehoge"}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/03 01:35 編集
2017/11/03 01:58
2017/11/03 02:04
2017/11/03 06:52 編集
2017/11/03 06:51 編集