функция содержит дубликаты не вернет истину? - PullRequest
0 голосов
/ 13 марта 2019

Почему «не верни истину» здесь работает? Вместо этого функция возвращает неопределенное ...

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:

Я вызываю функцию примерно так:

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

Ответы [ 4 ]

1 голос
/ 13 марта 2019

Вам необходимо ответить на рекурсивный вызов

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)
}
1 голос
/ 13 марта 2019

Вам не хватает оператора возврата перед рекурсивной функцией.

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;
    }
};
1 голос
/ 13 марта 2019

Потому что блок с 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;
1 голос
/ 13 марта 2019

Вы должны пройти через это с помощью отладчика браузера, но мое мнение, основанное на опыте, заключается в том, что вы можете установить для newarray значение null, что может произойти, если nums не объявлен правильно.Если newarray имеет значение null, проверка if вызовет исключение и не выполнит оценку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...