Search code examples
javascriptarraysfunctionobjectmethods

Is there any function so that i can calculate the length of each users skill's at once and then find which user have the maximum skills?


Find the person who has many skills in the users' object.

const users = {
  Alex: {
    email: '[email protected]',
    skills: ['HTML', 'CSS', 'JavaScript'],
    age: 20,
    isLoggedIn: false,
    points: 30
  },
  Asab: {
    email: '[email protected]',
    skills: ['HTML', 'CSS', 'JavaScript', 'Redux', 'MongoDB', 'Express', 'React', 'Node'],
    age: 25,
    isLoggedIn: false,
    points: 50
  },
  Brook: {
    email: '[email protected]',
    skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux'],
    age: 30,
    isLoggedIn: true,
    points: 50
  },
  Daniel: {
    email: '[email protected]',
    skills: ['HTML', 'CSS', 'JavaScript', 'Python'],
    age: 20,
    isLoggedIn: false,
    points: 40
  },
}

Is there any function so that I can calculate the length of each users skill's at once and then find which user have the maximum skills?


Solution

  • you can do something like this

    const userWithMaxSkills = users => Object.entries(users)
    .reduce((res, [username, data]) => {
        if(data.skills.length > res.maxSkills){
          return {
            maxSkills: data.skills.length,
            user: {
              [username]: data
            }
          }
        }
        return res
    }, 
     { 
      maxSkills: -1,
      user: undefined
     }
    ).user
    
    const users = {
      Alex: {
        email: '[email protected]',
        skills: ['HTML', 'CSS', 'JavaScript'],
        age: 20,
        isLoggedIn: false,
        points: 30
      },
      Asab: {
        email: '[email protected]',
        skills: ['HTML', 'CSS', 'JavaScript', 'Redux', 'MongoDB', 'Express', 'React', 'Node'],
        age: 25,
        isLoggedIn: false,
        points: 50
      },
      Brook: {
        email: '[email protected]',
        skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux'],
        age: 30,
        isLoggedIn: true,
        points: 50
      },
      Daniel: {
        email: '[email protected]',
        skills: ['HTML', 'CSS', 'JavaScript', 'Python'],
        age: 20,
        isLoggedIn: false,
        points: 40
      },
    }
    
    console.log(userWithMaxSkills(users))