Читаю книгу Pro Angular. Не понимаю в чем смысл записи в функции .filter(...)
get categories(): string[] {
return this.model.getProducts()
.map(p => p.category)
.filter((category, index, array) => array.indexOf(category) == index);}
Знаю, что это функция фильтрации в массиве, но зачем проверять заведомо известный индекс элемента?
В данном случае это пример получения уникальных значений в массиве:
.indexOf
проверяет элементы с начала массива, и если в массиве будет несколько одинаковых элементов - то в этом случае индекс совпадет только для первого вхождения:
var a = [1, 1, 2, 2, 3, 3, 4, 4];
console.log(a.filter((cur, i, arr) => arr.indexOf(cur) === i));
Однако, это может не сработать с объектами, так как в этом случае два объекта будут считаться разными, не смотря на то, что имеют одинаковые значения в полях
var a = [{
a: 1
}, {
a: 1
}, {
a: 1
}];
console.log(a.filter((cur, i, arr) => arr.indexOf(cur) === i))
В этом случае лучше использовать метод findIndex
var a = [{
a: 1
}, {
a: 1
}, {
a: 1
}];
console.log(a.filter((cur, i, arr) => arr.findIndex(c => c.a === cur.a) === i))
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте, у меня есть input type='range'С помощью js я задаю ему значения max, min, value
Здравствуйте, уважаемые форумчанеЗадачка состоит в том, чтобы проверить "правильность" скобок в строке str