Sergomen
@Sergomen
Просто делай добро и оно вернётся

Почему в массив добавляються лишние елементы?

Я написал функцию которая должна возвращать массив с уникальными элементами. Но почему-то в arr1 добавляються и не уникальные значения.
function einzigartig(arr) {
    let arr1 = [arr[0],];
    for (let i = 0; i < arr.length; i++)
        for (let j = 0; j < arr1.length; j++)
            // в моём понимании это условие срабатывает если в arr1 нету таких элементов как arr[i]
            if(arr[i] !== arr1[j])
                arr1.push(arr[i]);
    return arr1;
}
einzigartig([1,2,1]) // возвращает [1,2,1] хотя по и дее дожно быть  [1,2]

Что я сделал не так?
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 2
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
А Вы на листочке по шагам пройдите свой алгоритм...

Я вас больше удивлю:
einzigartig([1, 2, 3, 4, 5]) // [1, 2, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5]


Подумайте хорошо, когда срабатывает это условие: if(arr[i] !== arr1[j]) ведь и i и j пробегают все элементы массива

А еще Ваша функция некорректно отработает, если на вход придет пустой массив

P.S. именовать сущности на языках отличных от английского не очень хорошая идея... Я например только с гуглом смог понять, что это немецкий и как оно переводится...
Ответ написан
Комментировать
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
У меня такой вариант лежит давно:
/**
 * Уникализирует массив
 *
 * @param {Array} array Исходный массив
 * @return {Array} Массив с уникальными значениями
*/
function unique(array){
  return array.filter((val, i, arr)=>arr.indexOf(val)===i);
};
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
01 мая 2024, в 02:11
5000 руб./за проект
01 мая 2024, в 00:29
2000 руб./за проект
01 мая 2024, в 00:20
15000 руб./за проект