Метод 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 шт):
Суть примерно такова:
indexOf возвращает первое найденное вхождение элемента в массиве. Когда в первый раз встречается число, результат indexOf совпадает с индексом текущего элемента. Если же число встречается не в первый раз, то его индекс отличается от того, который возвращает indexOf
На вашем же примере: индекс первой единицы - 0, indexOf вернет тоже 0, т.к. это первое вхождение. На второй же единице индекс будет 1, а результат indexOf - все так же 0. Поэтому первая единица не попадет в итоговый массив, а все остальные попадут