Javascript 包含重复函数won';你不能返回真值吗?

Javascript 包含重复函数won';你不能返回真值吗?,javascript,function,oop,recursion,Javascript,Function,Oop,Recursion,为什么“返回真实”在这里不起作用?相反,函数返回未定义的 var containsDuplicate = function(nums) { let newArray = nums; let p = newArray.pop(); if (newArray.includes(p)) { return true; } else if (newArray) { containsDuplicate(newArray); }

为什么“返回真实”在这里不起作用?相反,函数返回未定义的

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]))

您应该使用浏览器调试器进行调试,但根据经验,我的观点是,您可能将newarray设置为null,如果nums声明不正确,就会出现这种情况。如果newarray为null,If检查将抛出异常而不求值。

递归函数之前缺少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;
    }
};

因为
的块包含重复(newArray)不返回任何内容。由于
newArray.includes(p)
,函数也很糟糕。使用hashmap对象:

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;
var-keys={}
for(设i=0,c=arr.length;i
您需要返回递归调用

var containsDuplicate=函数(nums){
设newArray=nums;
设p=newArray.pop();
if(newArray.includes(p)){
返回true;
}else if(newArray){
返回包含副本(newArray);
}否则{
返回false;
}
};

log(包含重复([1,2,3,9,9,0]))
如果要删除重复项,请查看以下答案:。这是一个简单得多的方法…而且内部的“containsDuplicate”不会返回其值?谢谢,但我知道如何删除重复项。以一套为例。我对这个奇怪的bug特别感兴趣。你忘了返回递归调用。谢谢!这确实是递归之前缺少的返回。。。