JavaScript 求解两数之和时.map方法返回undefined的原因是什么
问题原因分析
- 外层
twoSum函数没有定义返回值:函数执行完所有逻辑后没有return任何内容,默认返回undefined。你内部给map回调函数写的return,只是把值返回给map方法用来生成新数组,完全不会传递到外层函数。 - 对
Array.map()的使用场景理解错误:map的设计目的是对原数组每一项做映射转换,返回长度和原数组完全一致的新数组,不是用来做条件查找的。哪怕你拿到map返回的数组,里面只有符合if条件的位置是你要的下标数组,其余所有元素都是undefined,也没法直接拿到目标结果。 - 没有对map的返回结果做处理:你当前代码里调用了map,但完全没有接收它的返回值,也没有把这个值传递到外层return,相当于这部分逻辑执行完直接被丢弃了。
修正方案
你当前是暴力枚举的实现思路,不需要用map,替换成短路查找的方法更合适,修正后代码如下:
var twoSum = function (nums, target) { for (let i = 0; i < nums.length; i++){ const num = nums[i]; // 查找后半段数组中符合求和条件的元素下标 const matchIndex = nums.slice(i+1).findIndex(element => num + element === target); if (matchIndex !== -1) { // 转换为原数组的全局下标直接返回 return [i, i + 1 + matchIndex]; } } }
内容的提问来源于stack exchange,提问作者WYZku
相关产品推荐
相关产品推荐

