有没有什么函数可以让我一次性计算出每个用户的技能长度,然后找出哪个用户的技能最多?

问题描述 投票:0回答:3

在用户的对象中找到拥有多技能的人。

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
  },
}

有没有什么函数可以让我一次性计算出每个用户的技能长度,然后找出哪个用户的技能最多?

javascript arrays function object methods
3个回答
1
投票

你可以做这样的事情

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))


1
投票

您可以简单地按 sort()

 
Object.entries
 
skills.length
 并检索第一个元素。这里使用 
Object.fromEntries()
将结果转回对象。

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 }, };

const result = Object.fromEntries([
  Object.entries(users).sort((a, b) => b[1].skills.length - a[1].skills.length)[0]
]);

console.log(result);

但我完全同意@DimVai 的评论 - 对于这种类型的数据来说,数组绝对是更合适的选择,并且还简化了检索所需结果的过程。

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

const [result] = users.sort((a, b) => b.skills.length - a.skills.length);

console.log(result);


0
投票

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
  },
}

let maxSkills=Object.entries(users)[0][1].skills.length
let personWhoHasMostSkills=Object.entries(users)[0][0]
for(let i=0;i<Object.keys(users).length;i++)
{
    if(Object.entries(users)[i][1].skills.length>maxSkills)
    {
        maxSkills=Object.entries(users)[i][1].skills.length
        personWhoHasMostSkills=Object.entries(users)[i][0]
    }
}
console.log(`The person with the most skills: ${personWhoHasMostSkills} and number of skills: ${maxSkills}`)

© www.soinside.com 2019 - 2024. All rights reserved.