@jumper4

Как добраться до вложенного объекта в массиве?

Добрый вечер!
Реализуйте функцию, которая принимает на вход список пользователей и возвращает плоский список подруг всех пользователей (без сохранения ключей). Друзья каждого пользователя хранятся в виде массива в ключе friends. Пол доступен по ключу gender и может принимать значения male или female.

const users = [
  {
    name: 'Tirion',
    friends: [
      { name: 'Mira', gender: 'female' },
      { name: 'Ramsey', gender: 'male' },
    ],
  },
  { name: 'Bronn', friends: [] },
  {
    name: 'Sam',
    friends: [
      { name: 'Aria', gender: 'female' },
      { name: 'Keit', gender: 'female' },
    ],
  },
  {
    name: 'Rob',
    friends: [
      { name: 'Taywin', gender: 'male' },
    ],
  },
];
 
getGirlFriends(users);
// [
//   { name: 'Mira', gender: 'female' },
//   { name: 'Aria', gender: 'female' },
//   { name: 'Keit', gender: 'female' },
// ];


В чем сложность возникла? Нужно использовать функцию filter(), и я не могу понять, как добраться до ключа gender, чтобы проверить male или female. Долго сидел и пробовал, но ничего не могу придумать, хотя задачка кажется простой.

Спасибо за помощь!
  • Вопрос задан
  • 309 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Буквально в лоб добраться до пола первой подруги или друга первого юзера можно так:
users[0].friends[0].gender

Для решения задачи сначала нужно вытащить из каждого элемента массива (из каждого user) только его свойство friends (массив). Был объект user, стал только его массив friends. Методом map()

Причём, в массиве friends методом filter() надо оставить только тех, где gender === 'female'

Так из начального массива users получится массив массивов – иногда пустых, иногда с девушками.
Массив массивов сделать просто-массивом, без пустышек, можно методом flat()

Ну а потом можно эти два последовательных метода map(fn).flat() заменить на один, делающий то же самое, flatMap(fn)

spoiler
users.flatMap(({ friends }) => friends.filter(({ gender }) => gender === 'female'));

// [ {"name":"Mira","gender":"female"}, {"name":"Aria","gender":"female"}, {"name":"Keit","gender":"female"} ]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы