Ogólna liczba przyjaciół użytkowników w liście

0

Mam poniższą tablicę i teraz muszę stworzyć funkcję tak, aby liczyła i zwracała ogólną ilość przyjaciół (właściwość .friends) wszystkich użytkowników z tablicy.

Jeżeli chciałbym obliczyć sumę wszystkich środków (tą właściwość .balance) to muszę stworzyć coś takiego:

const calculateTotalBalance = users => {
   return users.reduce((random, user) => {
     return random + user.balance
   }, 0)
};

i to wtedy daję nam sumę wszystkich tych środków uczestników, ale jak obliczyć ile jest łącznie tych przyjaciół z zastosowaniem reduce()

[
  {
    name: "Moore Hensley",
    email: "[email protected]",
    eyeColor: "blue",
    friends: ["Sharron Pace"],
    isActive: false,
    balance: 2811,
    gender: "male"
  },
  {
    name: "Sharlene Bush",
    email: "[email protected]",
    eyeColor: "blue",
    friends: ["Briana Decker", "Sharron Pace"],
    isActive: true,
    balance: 3821,
    gender: "female"
  },
  {
    name: "Ross Vazquez",
    email: "[email protected]",
    eyeColor: "green",
    friends: ["Marilyn Mcintosh", "Padilla Garrison", "Naomi Buckner"],
    isActive: false,
    balance: 3793,
    gender: "male"
  },
  {
    name: "Elma Head",
    email: "[email protected]",
    eyeColor: "green",
    friends: ["Goldie Gentry", "Aisha Tran"],
    isActive: true,
    balance: 2278,
    gender: "female"
  },
  {
    name: "Carey Barr",
    email: "[email protected]",
    eyeColor: "blue",
    friends: ["Jordan Sampson", "Eddie Strong"],
    isActive: true,
    balance: 3951,
    gender: "male"
  },
  {
    name: "Blackburn Dotson",
    email: "[email protected]",
    eyeColor: "brown",
    friends: ["Jacklyn Lucas", "Linda Chapman"],
    isActive: false,
    balance: 1498,
    gender: "male"
  },
  {
    name: "Sheree Anthony",
    email: "[email protected]",
    eyeColor: "brown",
    friends: ["Goldie Gentry", "Briana Decker"],
    isActive: true,
    balance: 2764,
    gender: "female"
  }
]
0

co to znaczy "ile jest przyjaciół"?

0

zwyczajnie friends.length zamiast balance

const foo = users => users.reduce((friends, user) => friends + user.friends.length, 0);

chyba że nie chcesz liczyć duplikatów to wtedy możesz zebrać przyjaciół do tablicy, potem zrobić z nich Set i sprawdzić rozmiar:

const foo = users => new Set(users.reduce((friends, user) => [...friends, ...user.friends], [])).size;

ale czemu musi być na reduce? Lepiej to zrobić imo na flatMap:

// ilość
const foo = users => users.flatMap(user => user.friends).length;
// ilość unikalnych
const foo = users => new Set(users.flatMap(user => user.friends)).size;

1 użytkowników online, w tym zalogowanych: 0, gości: 1