JavaScript1.8から配列オブジェクトにmap, filter, reduce, some, everyと集合演算メソッドががさっと搭載されて随分と使いやすくなりました。
でもあれが足りませんね。first, lastメソッド。条件に合う最初の、もしくは最後の要素を返してくれるメソッド。reduceでも書けないことないんですけど適合したらbreakという処理にならないので無駄な判定が走りますし避けたいです。
そんなときにforループを書かなくてもいいように、生やしましょうfirst, lastメソッド。TypeScriptで。
/** Extends array object */
interface Array<T> {
/** Returns the first element that satisfies the predicate */
first(predicate:(element:T) => boolean, defaultVaule: T): T;
/** Returns the last element that satisfies the predicate */
last(predicate:(element:T) => boolean, defaultVaule: T): T;
}
Array.prototype.first = function (predicate: (element) => boolean, defaultVaule) {
for (var i: number = 0; i < this.length; i++) {
if (predicate(this[i])) return this[i];
}
return defaultVaule;
};
Array.prototype.last= function (predicate: (element) => boolean, defaultVaule) {
for (var i: number = this.length; i-- > 0;) {
if (predicate(this[i])) return this[i];
}
return defaultVaule;
};