Как получить доступ и перебирать массив, вложенный внутри объекта, который находится внутри другого объекта?

#javascript #arrays

#javascript #массивы

Вопрос:

Я новичок в программировании, только начал изучать JS. У меня есть упражнение, которое я не уверен, как решить. Задача состоит в том, чтобы подсчитать, какой пользователь обладает наибольшими навыками. Приведенный код выглядит следующим образом:

 const users = {
  Alex: {
    email: 'alex@alex.com',
    skills: ['HTML', 'CSS', 'JavaScript'],
    age: 20,
    isLoggedIn: false,
    points: 30
  },
  Asab: {
    email: 'asab@asab.com',
    skills: ['HTML', 'CSS', 'JavaScript', 'Redux', 'MongoDB', 'Express', 'React', 'Node'],
    age: 25,
    isLoggedIn: false,
    points: 50
  },
  Brook: {
    email: 'daniel@daniel.com',
    skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux'],
    age: 30,
    isLoggedIn: true,
    points: 50
  },
  Daniel: {
    email: 'daniel@alex.com',
    skills: ['HTML', 'CSS', 'JavaScript', 'Python'],
    age: 20,
    isLoggedIn: false,
    points: 40
  },
  John: {
    email: 'john@john.com',
    skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux', 'Node.js'],
    age: 20,
    isLoggedIn: true,
    points: 50
  },
  Thomas: {
    email: 'thomas@thomas.com',
    skills: ['HTML', 'CSS', 'JavaScript', 'React'],
    age: 20,
    isLoggedIn: false,
    points: 40
  },
  Paul: {
    email: 'paul@paul.com',
    skills: ['HTML', 'CSS', 'JavaScript', 'MongoDB', 'Express', 'React', 'Node'],
    age: 20,
    isLoggedIn: false,
    points: 40
  }
}  

Я предполагаю, что мне нужно использовать цикл, однако я не уверен, как получить доступ к массиву навыков?

Ответ №1:

Действительно, вы можете использовать цикл по ключам вашего users объекта. Затем сравните длины skills свойства, чтобы определить, у какого пользователя самый длинный список:

 const users = {Alex: {email: 'alex@alex.com',skills: ['HTML', 'CSS', 'JavaScript'],age: 20,isLoggedIn: false,points: 30},Asab: {email: 'asab@asab.com',skills: ['HTML', 'CSS', 'JavaScript', 'Redux', 'MongoDB', 'Express', 'React', 'Node'],age: 25,isLoggedIn: false,points: 50},Brook: {email: 'daniel@daniel.com',skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux'],age: 30,isLoggedIn: true,points: 50},Daniel: {email: 'daniel@alex.com',skills: ['HTML', 'CSS', 'JavaScript', 'Python'],age: 20,isLoggedIn: false,points: 40},John: {email: 'john@john.com',skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux', 'Node.js'],age: 20,isLoggedIn: true,points: 50},Thomas: {email: 'thomas@thomas.com',skills: ['HTML', 'CSS', 'JavaScript', 'React'],age: 20,isLoggedIn: false,points: 40},Paul: {email: 'paul@paul.com',skills: ['HTML', 'CSS', 'JavaScript', 'MongoDB', 'Express', 'React', 'Node'],age: 20,isLoggedIn: false,points: 40}}

let topUser;
for (let user in users) {
    if (!topUser || users[user].skills.length > users[topUser].skills.length) topUser = user;
}

console.log(topUser);  

Ответ №2:

Что вы пробовали до сих пор? Начните с цикла по объекту users, затем вы можете получить навыки для каждого пользователя.

 for (u in users) {
console.log(u.skills);
}