0

Why doesn't "return true" work here? Instead the function returns 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;
    }
};

EDIT:

I'm calling the function with something like this:

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

4 Answers4

1

You're missing a return statement before the recursive function.

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;
    }
};
Talha
  • 807
  • 9
  • 13
0

You should step through it with a browser debugger, but my opinion based on experience is that you may be setting newarray to null, which would happen if nums isn't declared correctly. If newarray is null, the if check will throw an exception and not evaluate.

John Lord
  • 13
  • 5
0

Because block with containsDuplicate(newArray); return nothing. Also function so bad because newArray.includes(p). Use 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;
0

You need to return the recursive call

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

For Remove Duplicate use Array#filter

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


function containsDuplicate(arr){
 return arr.filter((a,b)=> arr.indexOf(a)==b)
}
prasanth
  • 22,145
  • 4
  • 29
  • 53