返回未定义的困境:揭开函数和数组迭代背后的神秘面纱
在编程领域,使用函数和数组时会出现一个常见的谜团数组迭代。虽然经常使用 return 语句,但结果可能仍然是不确定的。为了揭示这个令人困惑的问题背后的原因,让我们探讨一个涉及名为 getByKey 的函数的特定案例,该函数尝试根据键从数组中检索对象。
The Enigma
getByKey 函数旨在搜索对象数组中的对象,始终返回 undefined。尽管其内部回调函数中存在 return 语句,但这种神秘的行为让开发人员感到困惑。
探索解决方案
经过调查,很明显 return语句在提供给 forEach 方法的回调函数中执行,这与从 getByKey 函数本身返回不同。为了解决这个问题,我们可以修改代码以使用 map 方法而不是 forEach,或者我们可以选择传统的 for 循环,它可以更好地控制迭代过程。
优化代码使用 Map
map 方法,我们将数组转换为包含所需结果的新数组。对于原始数组中的每个元素,我们应用回调函数,该函数搜索键并返回匹配的对象。
function getByKey(key) { return data.map(function (val) { if (val.Key === key) { return val; } }).filter(function (val) { return val !== undefined; })[0]; }
使用 For 循环的简化解决方案
为了提高效率,我们可以使用 for 循环来迭代数组元素。这种方法提供了对循环的直接控制,并允许我们在找到匹配对象时立即中断。
function getByKey(key) { for (var i = 0; i < data.length; i++) { if (data[i].Key === key) { return data[i]; } } }
理解微妙之处
注意这一点至关重要forEach 中的回调函数不会直接从包含函数返回。回调中的 return 语句影响回调本身的执行,但不影响封闭函数的执行流程。因此,在使用数组迭代函数时,必须仔细考虑 return 语句的位置。
以上是为什么我的函数在使用数组迭代时返回未定义?的详细内容。更多信息请关注PHP中文网其他相关文章!