Мне кажется, вам нужен service
, который обрабатывает процесс аутентификации (и его хранение).
В этой службе вам понадобятся некоторые основные методы:
isAuthenticated()
login()
logout()
Эта услуга должна быть введена в ваших контроллерах каждого модуля:
service.isAuthenticated()
). если нет, перенаправляйте / login service.login()
. Хороший и надежный пример для этого поведения является проект angular-app и, в частности, его модуль безопасности , который основан на удивительном HTTP-аут-перехватчике
Надеюсь, это поможет
Используйте Array.reduce()
для преобразования массива в карту по proyectId
. Преобразуйте карту в массив записей ([proyectId, customFields]
) с помощью Array.from()
и используйте Array.map()
для преобразования записей в формат объектов:
const objectArray = [{"proyectId":1,"fieldName":"dog","fieldValue":"wof"},{"proyectId":1,"fieldName":"cat","fieldValue":"meow"}];
const result = Array.from(
objectArray.reduce((r, { proyectId, ...o }) =>
r.set(proyectId, [...r.get(proyectId) || [], o])
, new Map())
).map(([proyectId ,customFields]) => ({
proyectId,
customFields
}));
console.log(result);
Вы можете использовать Array.reduce
для индексации ваших объектов по ключу (proyectId
), а затем использовать Object.values
для получения только значений:
const input = [{'proyectId': 1, 'fieldName': 'dog', 'fieldValue': 'wof'}, {'proyectId': 1, 'fieldName': 'cat', 'fieldValue': 'meow'}];
const result = Object.values(input.reduce((map, {proyectId, ...fields}) => {
map[proyectId] = map[proyectId] || {proyectId, customFields: []};
map[proyectId].customFields.push(fields);
return map;
}, {}));
console.log(result);
PS: пожалуйста, поделитесь своими попытками в следующий раз, как предлагалось ранее.