Underscore.jsにはfindLast()
メソッドまたはそれと同等のメソッドがありますか?Underscore.js findLast()メソッド
.find()
を行う最善の方法は何ですか、コレクションに一致する最後のアイテムを返しますか?
Underscore.jsにはfindLast()
メソッドまたはそれと同等のメソッドがありますか?Underscore.js findLast()メソッド
.find()
を行う最善の方法は何ですか、コレクションに一致する最後のアイテムを返しますか?
find
を使用
:
_.find(list.reverse(), iterator);
読むMDNをreverse
のドキュメントのために。
残念ながら、アンダースコアのコレクションは配列またはオブジェクトのいずれかです。あなたのコレクションが配列の場合、あなたは運がいいです。 reverse
を使用できます。
_.find(Object.keys(list).reverse(), function (key) {
return iterator(list[key], key, list);
});
あなた自身のためfindLast
関数を書くこともできます:それは、あなたの代わりにこれを実行する必要がありますオブジェクトの場合は
_.mixin({
findLast: function (list, iterator, context) {
if (list instanceof Array)
return _.find(list.slice(0).reverse(), iterator, context);
else return _.find(Object.keys(list).reverse(), function (key) {
return iterator.call(context, list[key], key, list);
});
}
});
今、あなたは他のアンダースコア方式のようにfindLast
使用することができます。
@AaditMShahで提案されているように、reverse
を使用するのが最も簡単な解決策ですが、配列in placeを操作することに注意してください。要素の順序を保持する必要がある場合は、完了後にもう一度reverse
に電話する必要があります。
あなたdon't want to use reverse
、あなたは_.findLast
findLast
とforEachRight
の上に広げ、独自のfindLastを作る提供
これは、あなただけの配列を処理し、オブジェクトを気にしないならば、それはどのように見えるかです:。
function findLast (array, callback, thisArg) {
var index = array.length,
last;
callback = callback && typeof thisArg == 'undefined' ? callback : _.bind(callback, thisArg);
while (index--) {
if (callback(array[index], index, array) == true) {
last = array[index];
break;
}
}
return last;
}
(それは動作しますが、私はそれを適切にテストしていない読んで誰にもだから最初にいくつかのテストを行い、コードをコピーするだけではありません)。
ありがとうございました! –
アンダースコア1.8.0では、これを実現するための方法findLastIndexが導入されました。
var numbers = [1, 2, 3, 4];
var index = _.findLastIndex(numbers, isOddNumber);
if (index > 0) { console.log(numbers[index]); }
// returns 3
ありがとうございました。 :)私はアンダースコアを望んでいた男.jsはバージョンを持っていた、彼らはすでに印象的なコレクションに合っているようだ...編集:これを発見、https://github.com/jashkenas/underscore/issues/546ダング。 –
'Array.reverse'は元のリストを変更するので理想的ではありません。 – dule
恐ろしい!ありがとう! – Lightning3