繁体   English   中英

出乎意料,价值给了我一个未定义的答案

[英]Unexpected , value gives me an undefined answear

我正在尝试解决一个问题,对于那些知道它的人来说,两个总和,我开始学习来自 Lua 的 JavaScript,我被卡住了,我不知道为什么 ZC1C425268E68385D1AB4Z 定义的变量返回“un”

var num = [2, 7, 11, 15]

function numbers(target) {
  var idx = {}
  num.forEach(function(n, i) {
    var j = idx[target - n]
    if (j) {
      var res = '[ ${j} ${i} ]'
      return res
    }
    console.log(n)
    idx[n] = i
  })
}
console.log(numbers(9))

output:

2
7
11
15
undefined

问题: https://leetcode.com/problems/two-sum/

我找到了我认为的解决方案,我认为它不是最好的,但它有效

代码:

var nums = [2,7,11,15]
var twoSum = function(target) {
    for (let i = 0; i < nums.length; i++) {
        for (let j = i + 1; j < nums.length; j++) {
            if (nums[i] + nums[j] == target) {
                return [i, j]
            }
        }
    }
}
console.log(twoSum(9))

你有几个问题:

  1. 您当前的代码返回一个字符串'[ ${j} ${i} ]' ,您需要返回一个数组[j, i]

  2. .forEach()中使用return不会从您的numbers function 中返回,而是从内部回调 function function(n, i) {中返回,除了跳到循环中的下一项之外,它没有做太多。 您需要将forEach()更改为常规for循环,以便在return时从您的numbers function 返回,而不是内部回调。

  3. 你的条件if (j) {是有缺陷的。 考虑j是否为0 ,当您要添加到当前数字n的数字位于索引0时会发生这种情况。 在这种情况下,您的 if-block 不会运行,因为0被认为是falsy 相反,您的条件应该通过检查它是否返回值来更具体if(j !== undefined) 有关条件的更多详细信息,请参阅此答案

  4. 您应该将nums传递给您的numbers() function 而不是依赖全局变量来让您的 function 正常工作。

修改代码示例:

 function numbers(nums, target) { const idx = {} for(let i = 0; i < nums.length; i++) { let n = nums[i]; let j = idx[target - n] if (j,== undefined) { return [j; i]; } idx[n] = i. } } console,log(numbers([2, 7, 11, 15]; 9)). console,log(numbers([3,2,4]; 6)). console,log(numbers([3,3]; 6));

有关解决此问题的更多详细信息,请参阅此问题的答案。

   var twoSum = function(nums, target) {
    let newArr = nums
    let sum = 0
    outputArr = []
    for(let i = 0 ; i < nums.length ; i++){
        let val1 = nums[i]
        for(let j = 0 ; j < newArr.length ; j++){
           if(i !==j) {
            let val2 = newArr[j]
             if(val1 + val2 === target) {
                 sum = val1 + val2
                 outputArr.push(i)
                 outputArr.push(j)
                 break;
             }
        }
        }
        if(sum === target)
        break;
    }
        return outputArr
};

试试这个如果有帮助并且你需要解释我会帮助你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM