在用户的对象中找到拥有多技能的人。
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 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))
您可以简单地按 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);
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}`)