简体   繁体   English

为什么我的find方法返回undefined?

[英]Why would my find method return undefined?

I'm recreating a number of Underscore.js methods to study JavaScript and programming in general. 我正在重新创建一些Underscore.js方法来研究JavaScript和编程。

Below is my attempts to recreate Underscore's _.find() method. 下面是我尝试重新创建_.find()_.find()方法。

var find = function(list, predicate) { // Functional style
    _.each(list, function(elem){
        if (predicate(elem)) {
            return elem;
        }
    });
};

var find = function(list, predicate) { // Explicit style
    if (Array.isArray(list)) {
        for (var i = 0; i < list.length; i++) {
            if (predicate(list[i])) {
                return list[i];
            }
        }
    } else {
        for (var key in list) {
            if (predicate(list[key])) {
                return list[key];
            }
        }
    }
};

My second find method, which is using for loop and for in loop works. 我的第二个find方法,它是利用for循环和for in循环的作品。 Whereas, my first find method would return undefined . 然而,我的第一个find方法将返回undefined I believe both should do the same work. 我相信两者都应该做同样的工作。 However, they don't. 但是,他们没有。 Would someone please point what is going on? 有人请指出发生了什么事吗?

Your return is only returning from the inner (nested) function and your find function is indeed not returning anything, hence the undefined . 你的return只是从内部(嵌套)函数返回,你的find函数确实没有返回任何东西,因此undefined

Try this instead: 试试这个:

var find = function(list, predicate) { // Functional style
    var ret;

    _.each(list, function(elem){
        if (!ret && predicate(elem)) {
            return ret = elem;
        }
    });

    return ret;
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM