【问题标题】:contains duplicates function won't return true?包含重复函数不会返回 true?
【发布时间】:2019-03-13 03:01:09
【问题描述】:

为什么“返回真”在这里不起作用?相反,该函数返回 undefined...

var containsDuplicate = function(nums) {
    let newArray = nums;
    let p = newArray.pop();
    if (newArray.includes(p)) {
        return true;
    }
    else if (newArray) {
        containsDuplicate(newArray);
    }
    else {
        return false;
    }
};

编辑:

我用这样的方式调用函数:

console.log(containsDuplicate([1,2,3,9,9,0]))

【问题讨论】:

  • 如果要删除重复项,请查看此答案:stackoverflow.com/a/9229821/10768127。这是一个更简单的方法
  • ...而内部的“containsDuplicate”不返回其值?
  • 谢谢,但我知道如何删除重复项。以 Set 为例。我对这个奇怪的错误特别感兴趣。
  • 你忘记返回递归调用
  • 谢谢!确实是递归前的缺失返回……

标签: javascript function oop recursion


【解决方案1】:

您在递归函数之前缺少一个 return 语句。

var containsDuplicate = function(nums) {
    let newArray = nums;
    let p = newArray.pop();
    if (newArray.includes(p)) {
        return true;
    }
    else if (newArray) {
        return containsDuplicate(newArray);
    }
    else {
        return false;
    }
};

【讨论】:

    【解决方案2】:

    您应该使用浏览器调试器逐步完成它,但根据经验,我认为您可能将 newarray 设置为 null,如果未正确声明 nums,就会发生这种情况。如果 newarray 为 null,则 if 检查将抛出异常并且不计算。

    【讨论】:

      【解决方案3】:

      因为containsDuplicate(newArray); 阻止返回任何内容。因为newArray.includes(p),功能也很糟糕。使用 hashmap aka Object:

      var keys = {}
      for (let i = 0, c = arr.length; i < c; i++) {
         let v = arr[i];
         if (!keys[v]) {
             keys[v] = true;
         } else {
             return true;
         }
      }
      return false;
      

      【讨论】:

        【解决方案4】:

        你需要返回递归调用

        var containsDuplicate = function(nums) {
          let newArray = nums;
          let p = newArray.pop();
          if (newArray.includes(p)) {
            return true;
          } else if (newArray) {
            return containsDuplicate(newArray);
          } else {
            return false;
          }
        };
        
        console.log(containsDuplicate([1, 2, 3, 9, 9, 0]))

        删除重复使用Array#filter

        console.log(containsDuplicate([1, 2, 3, 9, 9, 0]))
        
        
        function containsDuplicate(arr){
         return arr.filter((a,b)=> arr.indexOf(a)==b)
        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-24
          • 2014-02-04
          • 2019-08-15
          • 2014-09-12
          相关资源
          最近更新 更多