Не работает код
Подскажите пожалуйста где я допустил ошибку в коде. Функция должна выводить массив без дубликата
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);
Вы сами то поняли, что написали? Ваш код совершенно не предназначен для поиска дубликатов. Рассмотрим цикл
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"]