使用forEach的函数即使使用return语句也返回未定义的

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

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

您可以这样修改它:

function getByKey(key) {    

var found = null;

data.forEach(function (val) {

if (val.Key === key) {

found = val;

}

});

return found;

}

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

function getByKey(key) {    

for (var i=0; i<data.length; i++) {

if (data[i].Key === key) {

return data[i];

}

}

}

请注意,我还修改了您的代码以返回值,而不是键。我想这就是意图。您可能还对另一个迭代函数感到困惑:传递给forEach的回调的第一个参数是数组的元素。

以上是 使用forEach的函数即使使用return语句也返回未定义的 的全部内容, 来源链接: utcz.com/qa/406837.html

回到顶部