Привет, у меня есть следующие данные json...
{
"contacts":
[
{
"contactId": "00001",
"firstName": "test",
"lastName": "test",
"email": "[email protected]",
"phone": "0207 0000000",
"role": "Surveyor",
"customer": "00001",
"projects": [{"projId": "00002"}]
},
{
"contactId": "00002",
"firstName": "test1",
"lastName": "test1",
"email": "[email protected]",
"phone": "0207 1111111",
"role": "Manager",
"customer": "00001",
"projects": [{"projId": "00002"}, {"projId": "00003"}]
}
]
}
Мне нужна конечная точка API, которая возвращает контакты на основе projID, но у меня проблемы, потому что projId вложен в массив проектов...
//Get contacts by Project
app.get('/v1/projcontacts/:id', function(req, res) {
var id = req.params.id;
var projContacts = lodash.filter(contactData.contacts, { 'projId': id });
res.json(projContacts);
})
Кто-нибудь поможет мне с приведенным выше кодом, чтобы заставить lodash заглянуть внутрь проектов?





Вы можете попробовать что-то вроде этого:
app.get('/v1/projcontacts/:id', function(req, res) {
var id = req.params.id;
var projContacts = contacts.filter(
contact => contact.projects.map(
projects => projects.projId === id
).includes(true)
)
res.json(projContacts);
})lodash может быть излишним для этого. Вы можете использовать .some(), у которого есть дополнительное преимущество в виде раннего выхода, когда он находит первое совпадение:
app.get('/v1/projcontacts/:id', function(req, res) {
var id = req.params.id;
var projContacts = contactData.contacts.filter(contact => {
return contact.projects.some(project => project.projId === id);
});
res.json(projContacts);
})
Вы можете попробовать что-то вроде этого:
const data = {
"contacts":
[
{
"contactId": "00001",
"firstName": "test",
"lastName": "test",
"email": "[email protected]",
"phone": "0207 0000000",
"role": "Surveyor",
"customer": "00001",
"projects": [{"projId": "00002"}]
},
{
"contactId": "00002",
"firstName": "test1",
"lastName": "test1",
"email": "[email protected]",
"phone": "0207 1111111",
"role": "Manager",
"customer": "00001",
"projects": [{"projId": "00002"}, {"projId": "00003"}]
}
]
};
const projId = "00003";
// E.g Filter by project ID "00003"
const results = data.contacts.filter(x => x.projects.some(x => x.projId === projId));
console.info(JSON.stringify(results, null, 4));
Спасибо за это. Хорошая альтернатива использованию Lodash. Цените помощь.