Метод Filter, вывод

Обьясните пожалуйста, как работает метод filter данном примере. Если я правильно понимаю, то этот метод возвращает массив, который подходит по условию, которое задано. Так вот, в примере возвращаются единицы, почему работает именно так? Если я передаю в качестве аргумента item, (пусть это будет двойка из массива), ее индекс будет == 3, получается item == 2, index == 3, далее должно работать условие: (indexOf(item) === 3 !== index(3)) === false по идее двойка вылетает, тут все правильно. Но почему в таком случае остаются единицы, если это же условие срабатывает и на них? Прошу сильно не пинать, я еще совсем новичок

    let repeated
    return repeated = arr.filter((item, index) => arr.indexOf(item) !== index)
    // return arr.filter((item)=> item !== repeated[0])[0]
}

console.log(findUniq([1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1]));```

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

Автор решения: rusgeli

Суть примерно такова:

indexOf возвращает первое найденное вхождение элемента в массиве. Когда в первый раз встречается число, результат indexOf совпадает с индексом текущего элемента. Если же число встречается не в первый раз, то его индекс отличается от того, который возвращает indexOf

На вашем же примере: индекс первой единицы - 0, indexOf вернет тоже 0, т.к. это первое вхождение. На второй же единице индекс будет 1, а результат indexOf - все так же 0. Поэтому первая единица не попадет в итоговый массив, а все остальные попадут

→ Ссылка