.map(result => this.removeDuplicates(result.json(), this.rolesList));
removeDuplicates(json: any[], destination: any[]) {
destination = json.reduce((p, n) => {
// If role already in array, don't push
if (!p.includes(n)) { p.push(n); }
return p;
}, []);
}
Эта функция преобразует ваш массив, возвращаемый при вызове HTTP, с помощью функции reduce
.
РЕДАКТИРОВАТЬ: Как работает reduce
( документация )
Для новичков в Javascript или тех, кто не знает функцию reduce
:
reduce
- это функция, которая будет перебирать массив и преобразовывать его.Его подпись
reduce(callback(previousElement, nextElement, currentIndex, arr), startingValue);
Давайте рассмотрим пример: преобразуем массив чисел в их квадратные значения.
const initial = [1, 2, 3, 4];
const transformed = initial.reduce((p, n) => {
p.push(n * n);
return p;
}, []); // Will give [1, 4, 9, 16]
Теперь давайте разберем его:
На первой итерации мы находимся на первом элементе массива: 1.
Начальное значение, данноеreduce
функция - пустой массив.
При обратном вызове это даст
p = [], n = 1
Итак, мы помещаем квадратное значение 1 в массив, а затем возвращаем массив (обязательно).
Приходит следующая итерация: значения обратного вызова:
p = [1], n = 2
Мы делаем тот же процесс, и на третьей и четвертой итерациях у нас будет это
3 : p = [1, 4], n = 3
4 : p = [1, 4, 9], n = 4
Когда функция завершена (nextElement
больше не имеет значения для принятия), она возвращает последнее значение previousElement
, которое является преобразованным массивом.