首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Underscore.js findLast()方法

Underscore.js findLast()方法
EN

Stack Overflow用户
提问于 2013-09-03 22:12:10
回答 3查看 8.6K关注 0票数 8

Underscore.js是否有findLast()方法或等效方法?

除了返回集合中的最后一个匹配项之外,做.find()的最佳方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-03 22:16:17

反转列表,然后使用find

代码语言:javascript
复制
_.find(list.slice().reverse(), iterator);

有关reverse的文档,请阅读MDN。

不幸的是,下划线中的集合可能是数组,也可能是对象。如果您的集合是一个数组,那么您是幸运的。您可以使用reverse。但是,如果它是一个对象,则需要这样做:

代码语言:javascript
复制
_.find(Object.keys(list).reverse(), function (key) {
    return iterator(list[key], key, list);
});

您可以自己编写一个findLast函数:

代码语言:javascript
复制
_.mixin({
    findLast: function (list, iterator, context) {
        if (list instanceof Array)
            return _.find(list.slice().reverse(), iterator, context);
        else return _.find(Object.keys(list).reverse(), function (key) {
            return iterator.call(context, list[key], key, list);
        });
    }
});

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

票数 13
EN

Stack Overflow用户

发布于 2015-12-24 16:07:32

下划线1.8.0引入了一个方法findLastIndex,它可以用来实现这一点。

代码语言:javascript
复制
var numbers = [1, 2, 3, 4];
var index = _.findLastIndex(numbers, isOddNumber);
if (index > 0) { console.log(numbers[index]); }
// returns 3
票数 4
EN

Stack Overflow用户

发布于 2014-01-07 14:55:33

正如@AaditMShah所建议的那样,使用reverse是最简单的解决方案,但请注意,它操作数组就位。如果需要保留元素的顺序,则必须在完成之后第二次调用reverse

如果你reverse,你可以

  • 使用罗达什代替,它提供了_.findLast
  • 从Lodash获取相关代码,在findLastforEachRight上展开,并创建自己的findLast。

如果您只处理数组而不关心对象,这就是它的样子:

代码语言:javascript
复制
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;
}

(它起作用了,但我还没有对它进行适当的测试。因此,对于任何阅读这篇文章的人,请先运行一些测试,而不是仅仅复制代码。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18602325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档