freeCodeCamp/curriculum/challenges/portuguese/02-javascript-algorithms-an.../basic-data-structures/iterate-through-the-keys-of...

3.4 KiB

id title challengeType forumTopicId dashedName
587d7b7d367417b2b2512b1d Iterar através das chaves de um objeto com a declaração for...in 1 301162 iterate-through-the-keys-of-an-object-with-a-for---in-statement

--description--

Às vezes, você pode precisar iterar através de todas as chaves dentro de um objeto. Isso requer uma sintaxe específica no JavaScript chamada de declaração for...in. Para nosso objeto users, isso pode se parecer como:

for (let user in users) {
  console.log(user);
}

Isso vai exibir no console Alan, Jeff, Sarah e Ryan - cada valor em sua própria linha.

Nessa declaração, definimos uma variável user e, como você pode ver, essa variável é redefinida durante cada iteração para cada chave do objeto conforme o comando se repete através do objeto, resultando em cada nome de usuário sendo exibido no console.

Observação: objetos não mantém uma ordem para as chaves armazenadas como arrays fazem. Portanto, a posição de uma chave em um objeto, ou a ordem relativa na qual ela aparece, é irrelevante quando referenciando ou acessando aquela chave.

--instructions--

Nós definimos uma função countOnline a qual aceita um argumento (um objeto users). Use a declaração for...in dentro dessa função para iterar o objeto users passado para a função, e retorne o número de users o qual possuam a propriedade online definida como true. Um exemplo de um objeto users o qual pode ser passado para countOnline é mostrado abaixo. Cada usuário terá a propriedade online com um valor true ou false.

{
  Alan: {
    online: false
  },
  Jeff: {
    online: true
  },
  Sarah: {
    online: false
  }
}

--hints--

A função countOnline deve usar a instrução for in para iterar através das chaves de um objeto passado para ele.

assert(
  code.match(
    /for\s*\(\s*(var|let|const)\s+[a-zA-Z_$]\w*\s+in\s+[a-zA-Z_$]\w*\s*\)/
  )
);

A função countOnline deve retornar 1 quando o objeto { Alan: { online: false }, Jeff: { online: true }, Sarah: { online: false } } for passado para ele

assert(countOnline(usersObj1) === 1);

A função countOnline deve retornar 2 quando o objeto { Alan: { online: true }, Jeff: { online: false }, Sarah: { online: true } } for passado para ele

assert(countOnline(usersObj2) === 2);

A função countOnline deve retornar 0 quando o objeto { Alan: { online: false }, Jeff: { online: false }, Sarah: { online: false } } for passado para ele

assert(countOnline(usersObj3) === 0);

--seed--

--after-user-code--

const usersObj1 = {
  Alan: {
    online: false
  },
  Jeff: {
    online: true
  },
  Sarah: {
    online: false
  }
}

const usersObj2 = {
  Alan: {
    online: true
  },
  Jeff: {
    online: false
  },
  Sarah: {
    online: true
  }
}


const usersObj3 = {
  Alan: {
    online: false
  },
  Jeff: {
    online: false
  },
  Sarah: {
    online: false
  }
}

--seed-contents--

const users = {
  Alan: {
    online: false
  },
  Jeff: {
    online: true
  },
  Sarah: {
    online: false
  }
}

function countOnline(usersObj) {
  // Only change code below this line

  // Only change code above this line
}

console.log(countOnline(users));

--solutions--

function countOnline(usersObj) {
  let online = 0;
  for(let user in usersObj){
    if(usersObj[user].online) {
      online++;
    }
  }
  return online;
}