This question already has answers here:
Jquery each - Stop loop and return object

(6个答案)


7年前关闭。




我有一个名为questionSets的数组,里面充满了对象。 createSet函数应创建新的或创建现有questionSets对象的副本。如果使用createSet进行复制,则使用功能getQuestionsFromSet。出于某些原因,当我从createSet()内部调用getQuestionsFromSet()时,我总是得到一个“未定义”的返回值。我不知道为什么,因为当我对要由getQuestionsFromSet()返回的值进行console.log()时,我确切地看到了我想要的。

我有这两个功能。
function createSet(name, copiedName) {
    var questions = [];
    if (copiedName) {
        questions = getQuestionsFromSet(copiedName);
    }
    console.log(questions); // undefined. WHY??
    questionSets.push({
        label: name,
        value: questions
    });
}; // end createSet()

function getQuestionsFromSet(setName) {
    $.each(questionSets, function (index, obj) {
        if (obj.label == setName) {
            console.log(obj.value); // array with some objects as values, which is what I expect.
            return obj.value;
        }
    });
}; // end getQuestionsFromSet()

最佳答案

因为getQuestionsFromSet()不对任何东西进行return,所以它是隐式未定义的。

您需要的可能是这样的:

function getQuestionsFromSet(setName) {
    var matched = []; // the array to store matched questions..
    $.each(questionSets, function (index, obj) {
        if (obj.label == setName) {
            console.log(obj.value); // array with some objects as values, which is what I expect.
            matched.push(obj.value); // push the matched ones
        }
    });
    return matched; // **return** it
}

10-05 22:39