Извлекать идентификатор объекта с помощью Javascript

#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. filter() и some()

Ответ №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
)