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

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

问题描述:

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

I'm just making a function for checking a value of something in my object array, but for some reason it keeps returning undefined. Why is that?

演示: 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);


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

In your function, you're returning from the function passed to forEach, not from getByKey.

你可以像这样适应:

function getByKey(key) {    
    var found = null;
    data.forEach(function (val) {
        if (val.Key === key) {
            found = val;
        }
    });
    return found;
}

但这将迭代所有元素,即使立即找到该项目。这就是为什么你最好用来表示循环:

But this would iterate over all elements, even if the item is immediately found. That's why you'd better use a simple for loop :

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

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

Note that I also adapted your code to return the value, not the key. I suppose that was the intent. You might also have been confused with another iteration function : the first argument passed to the callback you give to forEach is the element of the array.