用js刷leetcode第1题,forEach和for循环执行,返回结果为什么不一样,如下图代码

问题

用js刷leetcode第1题,forEach和for循环执行,返回结果为什么不一样,如下图代码

for循环

返回[0,1]

    var nums = [2, 7, 11, 15], target = 9;

    var twoSum = function (nums, target) {
      const map = new Map();
      for (let i = 0; i < nums.length; i++) {
        var n1 = nums[i]
        var n2 = target - n1;
        if (map.has(n2)) {
          return [map.get(n2), i]
        } else {
          map.set(n1, i)
        }
      }
    };

    var result = twoSum(nums, target)
    console.log('result', result)

forEach

返回 undefined

    var nums = [2, 7, 11, 15], target = 9;
    var twoSum = function (nums, target) {
      const map = new Map()
      nums.forEach((item, index) => {
        let n1 = nums[index];
        let n2 = target - n1
        if (map.has(n2)) {
          return [map.get(n2), index]
        } else {
          map.set(n1, index)
        }
      })
    };

    var result = twoSum(nums, target)
    console.log('result', result)
阅读 2.2k
2 个回答

看return语句所在。
forEach的参数是个函数,return语句相当于结束这个函数的运行,并不是外层函数。外层函数相当于没有return语句,默认返回undefined

var nums = [2, 7, 11, 15], target = 9;
        var result = ''  //新增变量
        var twoSum = function (nums, target) {
        const map = new Map()
        nums.forEach((item, index) => {
            let n1 = nums[index];
            let n2 = target - n1
            if (map.has(n2)) {
                result =  [map.get(n2), index]  //修改
            } else {
            map.set(n1, index)
            }
        })
        };

        twoSum(nums, target)  //修改
        console.log('result', result)

第二个要这样写,原因楼上也说了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题