首页 > 解决方案 > 为什么在我的 jQuery 循环中返回不起作用?

问题描述

我有以下函数,其中将在对象数组中查找 ID,查找匹配的对象并返回其名称。

function find_object(id) {
    $.each(array_of_objects, function(index, obj) {
        if (obj.id === id) {
            console.log('returning');
            console.log(obj.name);
            return obj.name;
        }
    });
}

非常令人困惑的是,它总是会记录正确的obj.name,但返回的值总是undefined

最终我意识到该return语句似乎并没有真正返回,我重写了这样的函数:

function find_object(id) {
    var obj_name;
    $.each(array_of_objects, function(index, obj) {
        if (source.uuid === uuid) {
            obj_name = obj.name;
        }
    });
    return obj_name;
}

这现在可以正常工作。这是怎么回事?

标签: javascriptjquery

解决方案


return在您的第一个示例中,仅returns 来自您传递给的迭代器函数forEach

但返回的值总是未定义的。

那是因为你的find_object函数永远不会返回任何特定的东西。没有显式返回的函数的标准返回值undefined在 Javascript 中。

另外,你为什么不使用Array.prototype.find()?使用就像

function find_object(id) {
    return array_of_objects.find(obj => obj.id === id);
}

或者,如果您只想name这样做:

function find_object(id) {
    return { name } = array_of_objects.find(obj => obj.id === id);
}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find


推荐阅读