Удаление дубликатов из массива в javascript

var removeDuplicates = function(nums) {
    for(let i=0; i<nums.length; i++){
        for(let j=i+1; j<nums.length; j++){
            if (nums[i]===nums[j]){
                nums.splice(i,1);
            }
        }
    }
};

Это мой код для удаления дубликатов, он работает для чисел, которые повторяются дважды, но не работает для чисел, которые повторяются более 2. Может ли кто-нибудь сказать мне, что здесь не так? Я хочу решить эту проблему, используя только циклы for. Ввод: 0,0,1,1,1,2,2,3,3,4 Выход: 0,1,1,2,3,4 Ожидаемое: 0,1,2,3,4

Я бы использовал Set или объектные ключи, чтобы получить уникальные значения.

doublesharp 20.02.2023 17:34

Но ошибка в вашем коде заключается в том, что внутренний цикл также должен начинаться с 0, а не с i+1.

doublesharp 20.02.2023 17:34
Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Интервьюер: Почему &apos;[] instanceof Object&apos; возвращает &quot;true&quot;?
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) - это древовидная структура данных, которая представляет структуру и иерархию исходного кода на языке...
0
2
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • Вы удаляете элементы во время итерации вперед, поэтому вы будете пропускать элемент каждый раз, когда он удаляется (из-за смещения индексов вниз). Вместо этого выполните цикл назад, чтобы удалить во время итерации.
  • Вырваться из внутреннего цикла, как только будет найдено совпадающее число.

const removeDuplicates = function(nums) {
  for (let i = nums.length - 1; i >= 0; i--) {
    for (let j = 0; j < i; j++)
      if (nums[j] === nums[i]) {
        nums.splice(i, 1);
        break;
      }
  }
};
let arr = [0,0,1,1,1,2,2,3,3,4];
removeDuplicates(arr);
console.info(arr);

Поиск уникальных элементов массива намного проще сделать с помощью Set:

const uniqueValues = nums =>  [...new Set(nums)];
console.info(uniqueValues([0,0,1,1,1,2,2,3,3,4]));

Другие вопросы по теме