为什么我的查找方法 return 未定义?

Why would my find method return undefined?

我正在重新创建一些 Underscore.js 方法来研究 JavaScript 和一般编程。

下面是我尝试重新创建 Underscore 的 _.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];
            }
        }
    }
};

我的第二个 find 方法,它使用 for 循环和 for in 循环。然而,我的第一个 find 方法是 return undefined。我相信两者都应该做同样的工作。然而,他们没有。有人能指出这是怎么回事吗?

您的 return 仅从内部(嵌套)函数返回,而您的 find 函数确实没有返回任何内容,因此 undefined.

试试这个:

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

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

    return ret;
};