Почему возврат в моем цикле jQuery не работает? - PullRequest
0 голосов
/ 13 октября 2019

У меня была следующая функция, в которой идентификатор просматривался в массиве объектов, искал соответствующий объект и возвращал его имя.

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 Ответ

3 голосов
/ 13 октября 2019

return в вашем первом примере только return s от функции итератора, которую вы передаете 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...