即使使用return语句,forEach函数也会返回undefined

Dat*_*sik 8 javascript

我只是创建一个函数来检查我的对象数组中的某个值,但由于某种原因它会一直返回undefined.这是为什么?

演示:http://jsfiddle.net/cNYwz/1/

var data = [{
    "Key": "1111-1111-1111",
        "Email": "test@test.com"
}, {
    "Key": "2222-2222-2222",
        "Email": "test@boo.com"
}];


function getByKey(key) {    
    data.forEach(function (i, val) {
        if (data[val].Key === key) {
            return data[val].Key;
        } else {
            return "Couldn't find";
        }
    });
}

var asd = getByKey('1111-1111-1111');
console.log(asd);
Run Code Online (Sandbox Code Playgroud)

Den*_*ret 16

在你的函数中,你从传递给函数返回forEach,而不是从函数返回getByKey.

你可以像这样调整它:

function getByKey(key) {    
    var found = null;
    data.forEach(function (val) {
        if (val.Key === key) {
            found = val;
        }
    });
    return found;
}
Run Code Online (Sandbox Code Playgroud)

但是这将迭代所有元素,即使立即找到该项目.这就是为什么你最好使用一个简单的for循环:

function getByKey(key) {    
    for (var i=0; i<data.length; i++) {
         if (data[i].Key === key) {
            return data[i];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我还调整了您的代码以返回值,而不是键.我想那是意图.您可能还与另一个迭代函数混淆:传递给forEach的回调的第一个参数是数组的元素.