Underscore.js findLast()方法

Qua*_*Van 7 javascript underscore.js

Underscore.js有findLast()方法还是等价?

什么是最好的方法,.find()但返回在Collection中匹配的最后一项?

Aad*_*hah 11

反转列表然后使用find:

_.find(list.reverse(), iterator);
Run Code Online (Sandbox Code Playgroud)

阅读MDN以获取文档reverse.


不幸的是,下划线中的集合可以是数组或对象.如果你的收藏是一个阵列,那么你很幸运.你可以用reverse.但是,如果它是一个对象,那么你需要这样做:

_.find(Object.keys(list).reverse(), function (key) {
    return iterator(list[key], key, list);
});
Run Code Online (Sandbox Code Playgroud)

你可以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);
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

现在您可以findLast像任何其他下划线方法一样使用.

  • 使用`Array.reverse`并不理想,因为它会改变原始列表. (6认同)