为什么在我的jQuery循环中返回不起作用?

时间:2019-10-13 19:51:13

标签: javascript 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;
}

现在这可以正常工作。发生了什么事?

1 个答案:

答案 0 :(得分:3)

在第一个示例中,

return仅将您传递给return的迭代器函数中的forEach个。

  

,但是返回的值始终是不确定的。

这是因为您的find_object函数从不返回任何特定内容。没有显式返回的函数的标准返回值为Java中的undefined

此外,为什么不使用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