Почему эта функция фильтра устанавливает индексы равными друг другу? - PullRequest
0 голосов
/ 18 марта 2020
const nonDuplicate = function(arr) {
    let filteredArr = arr.filter(function(item, index){
        if(arr.indexOf(item) === index)
            return item
    })
    console.log(filteredArr)
}
nonDuplicate([1, 2, 3, 1, 3, 4, 4, 5, 6])

Может кто-нибудь объяснить мне, почему это работает с точки зрения удаления дубликатов в массиве? Какой смысл устанавливать индексы равными друг другу?

1 Ответ

0 голосов
/ 18 марта 2020

Какой смысл устанавливать индексы равными друг другу?

Я полагаю, вы ссылаетесь на эту строку:

        if(arr.indexOf(item) === index)

=== оператор на самом деле является оператором строгое равенство . На самом деле он разрешается до логического значения ... true или false.

Откройте консоль JavaScript и введите следующее:

1 === 1

Вы вернетесь true. Аналогичным образом, если вы введете 1 === 2, вы получите false.

Теперь, к фактическому коду, есть функция indexOf . Возвращает индекс элемента в массиве или -1, если он не найден. Таким образом, для каждого элемента в массиве они проверяют, равен ли первый индекс этого конкретного элемента index этого конкретного элемента. Идея состоит в том, что к тому времени, когда l oop достигнет второго 1 в этом примере массива, indexOf фактически возвратит 0, потому что первый индекс, который соответствует значению 1, равен 0 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...