Читаю книгу 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))
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости