我只是在创建一个用于检查对象数组中某个值的函数,但是由于某种原因,它一直在返回undefined。这是为什么?
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。
forEach
getByKey
您可以这样修改它:
function getByKey(key) { var found = null; data.forEach(function (val) { if (val.Key === key) { found = val; } }); return found; }
但这会迭代所有元素,即使立即找到该项目也是如此。这就是为什么最好使用一个简单的for循环:
for
function getByKey(key) { for (var i=0; i<data.length; i++) { if (data[i].Key === key) { return data[i]; } } }
请注意,我还修改了您的代码以返回值,而不是键。我想这就是意图。您可能还对另一个迭代函数感到困惑:传递给forEach的回调的第一个参数是数组的元素。