Учитывая, что ниже JSON является моим объектом, как я могу извлечь userId и роли, хранить их в отдельных массивах соответственно, без повторяющихся значений.
let rosterInfo =
[
{
"shiftName": "A",
"userDetail": [
{
"userId": 'Mary',
"roles": ['Operator', 'Supervisor']
},
{
"userId": 'John',
"roles": ['Supervisor', Maintenance Technician]
}
]
},
{
"shiftName": "B",
"userDetail": [
{
"userId": 'Crusier',
"roles": ['Operator', 'Supervisor']
},
{
"userId": 'Philips',
"roles": ['Operator', 'Supervisor']
}
]
},
{
"shiftName": "C",
"userDetail": [
{
"userId": 'Heath',
"roles": ['Operator', 'Supervisor']
},
{
"userId": 'Daniel',
"roles": ['Operator', 'Supervisor']
}
]
}
];
Конечный массив ролей должен быть: ['Оператор,' Супервайзер ',' Техник по обслуживанию '] Окончательный массив userId должен быть: [' Heath ',' Daniel ',' Philips ',' John ',' Mary ',' Crusier ']
Примечание: я использовал циклы ForEach и For, но это не будет идеальным решением. Вот мое решение с использованием петель.
rosterInfo.forEach(rosterItem => {
for (let userItem of rosterItem['userDetail']) {
userItem['roles'].forEach(role => {
this.rolesInAShift.indexOf(role) > -1
? ''
: this.rolesInAShift.push(role);
});
}
});
В дополнение к этому, если вообще из указанного выше объекта, если вообще я хочу отфильтровать вышеуказанный объект с именем «Джон» и роли «Супервизор», то финал будет чем-то такого рода.
rosterInfo =
[
{
"shiftName": "A",
"userDetail": [
{
"userId": 'John',
"roles": ['Supervisor', 'Maintenance Technician']
}
]
},
{
"shiftName": "B",
"userDetail": [
]
},
{
"shiftName": "C",
"userDetail": [
]
}
]
Мне удалось добиться этого с помощью циклов, однако, используя нижеприведенную логику c, не получается то, что я хочу.
someVar = rosterInfo.map(element => {
return {
...element,
userDetail: element.userDetail.filter(
subElement =>
subElement.roles.indexOf('Supervisor') > -1 &&
subElement.userId.indexOf('Rajasekhar')
)
};
});