#javascript
#javascript
Вопрос:
У меня есть следующий массив объектов:
[
{
"id": 97,
"name": "Jon",
"technologies": [
{
"id": 6,
"name": "React"
},
{
"id": 7,
"name": "Messageria"
}
]
},
{
"id": 98,
"name": "Doe",
"technologies": [
{
"id": 2,
"name": "Javascript"
},
{
"id": 6,
"name": "React"
}
]
},
{
"id": 99,
"name": "Mark",
"technologies": [
{
"id": 8,
"name": "PHP"
},
{
"id": 9,
"name": "Laravel"
}
]
}
]
Как я мог бы отфильтровать этот массив и вернуть только разработчиков, у которых есть, например, технология с идентификатором 6?
Мне нужны только разработчики, которые имеют отношение к технологии id 6, однако мне нужно, чтобы другие связанные технологии также отображались разработчику.
Я знаю, что с помощью метода find это возможно сделать, но я не знаю, как это реализовать.
const result = developers.find(dev => dev.technologies ?);
Какой была бы правильная форма?
Комментарии:
Ответ №1:
Вы можете использовать фильтр с некоторыми операциями с массивами для этой задачи. Что-то вроде этого:
persons.filter(person => person.technologies.some(tech => tech.id == 6))
Ответ №2:
Это вернет сведения о человеке с идентификатором технологии 6:
persons = [
{
"id": 97,
"name": "Jon",
"technologies": [
{
"id": 6,
"name": "React"
},
{
"id": 7,
"name": "Messageria"
}
]
},
{
"id": 98,
"name": "Doe",
"technologies": [
{
"id": 2,
"name": "Javascript"
},
{
"id": 6,
"name": "React"
}
]
},
{
"id": 99,
"name": "Mark",
"technologies": [
{
"id": 8,
"name": "PHP"
},
{
"id": 9,
"name": "Laravel"
}
]
}
]
persons.filter(person => person.technologies.find(tech => tech.id == 6))
Ответ №3:
Вам нужно использовать some для определения, существует ли элемент с определенным идентификатором или нет:
const data = [
{
"id": 97,
"name": "Jon",
"technologies": [
{
"id": 6,
"name": "React"
},
{
"id": 7,
"name": "Messageria"
}
]
},
{
"id": 98,
"name": "Doe",
"technologies": [
{
"id": 2,
"name": "Javascript"
},
{
"id": 6,
"name": "React"
}
]
},
{
"id": 99,
"name": "Mark",
"technologies": [
{
"id": 8,
"name": "PHP"
},
{
"id": 9,
"name": "Laravel"
}
]
}
]
const myFilteredData = data.filter(test => test.technologies.some(data => data.id===6));
console.log(
myFilteredData
)