Не работает код

Подскажите пожалуйста где я допустил ошибку в коде. Функция должна выводить массив без дубликата

const duplicateArray = ['a','b','c','a','b','c','q'];
function funcDeleteDuplicate(array) {
    for (let i = 0; i <= array.length; i++) {
        if (array.indexOf(array[i]) === i) {
            array.splice(i,1);
        }
    }
    return array;
}
console.log(funcDeleteDuplicate(duplicateArray));


Ответы (2 шт):

Автор решения: Виктор

Используйте Set:

const duplicateArray = ['a','b','c','a','b','c','q'];
const mySet = new Set(duplicateArray);
const arr = Array.from(mySet);
console.log(arr);

→ Ссылка
Автор решения: KordDEM

Вы сами то поняли, что написали? Ваш код совершенно не предназначен для поиска дубликатов. Рассмотрим цикл

    for (let i = 0; i <= array.length; i++) {
        if (array.indexOf(array[i]) === i) {
            array.splice(i,1);
        }
    }

Что в нем происходит на первой итерации? Ищем i-ый = 0 элемент массива = 'a'. Находим его первую позицию - 0. Сравниваем его с i = 0. Они совпадают? Да, удаляем элемент из массива. Массив стал ["b", "c", "a", "b", "c", "q"]; Увеличиваем i и сравниваем с длинной нового массива = 6

Идем дальше берем i-ый = 1 элемент нового массива = 'c'. Находим его первую позицию в новом массиве - 1. Сравниваем его с i = 1. Они совпадают? Да, удаляем элемент из массива. Массив стал ["b", "a", "b", "c", "q"]. Увеличиваем i и сравниваем с длинной нового массива = 5

Идем дальше берем i-ый = 2 элемент нового массива = 'b'. Находим его первую позицию в новом массиве - 0. Сравниваем его с i = 2. Они совпадают? Нет. Массив не изменился. Увеличиваем i и сравниваем с длинной нового массива = 5

Идем дальше берем i-ый = 3 элемент нового массива = 'с'. Находим его первую позицию в новом массиве - 3. Сравниваем его с i = 3. Они совпадают? Да, удаляем элемент из массива. Массив стал ["b", "a", "b", "q"]. Увеличиваем i и сравниваем с длинной нового массива = 4.

Идем дальше берем i-ый = 4 элемент нового массива - нет у нас элемента с позиции 4. Сравниваем -1(т.к. элемента нет) с i = 4. Они совпадают? Нет. Массив не изменился. Итоговый массив ["b", "a", "b", "q"]

→ Ссылка