O que é o loop For...in e quando você deve usá-lo?
Um loop
for...in é melhor usado quando você precisa iterar sobre as propriedades de um objeto. Este loop irá iterar sobre todas as propriedades enumeráveis de um objeto, incluindo propriedades herdadas e propriedades não numéricas.
Uma propriedade herdada é uma propriedade que é herdada da cadeia de protótipos do objeto. Uma propriedade não numérica é uma propriedade que não é um número ou uma string que pode ser convertida em um número.
Aqui está a sintaxe básica de um loop for...in:
for (variable in object) {
// code block to be executed
}
A variável no exemplo representa a propriedade atual do objeto que está sendo percorrido.
Vamos dar uma olhada em alguns exemplos para que você possa entender melhor como o loop for...in funciona.
Neste primeiro exemplo temos um objeto fruit e queremos percorrer cada propriedade e registrar o valor no console.
const fruit = {
name: 'apple',
color: 'red',
price: 0.99
};
for (const prop in fruit) {
console.log(fruit[prop]);
}
A variável prop representa a propriedade atual do objeto. fruit[prop] é usado para acessar o valor de cada propriedade.
Para a primeira iteração, prop será name. Para a segunda iteração, prop será color e assim por diante.
Os resultados registrados no console serão apple, red e 0.99.
Neste segundo exemplo, temos um objeto aninhado e queremos iterar sobre cada propriedade e registrar o valor no console.
const person = {
name: 'John',
age: 30,
address: {
street: '123 Main St',
city: 'Anytown',
state: 'CA'
}
};
for (const prop in person) {
console.log(person[prop]);
}
A propriedade address é um objeto por si só. O loop for...in também percorrerá as propriedades do objeto person e registrará o objeto inteiro address no console.
Aqui está como o resultado aparecerá no console:
John
30
{ street: '123 Main St', city: 'Anytown', state: 'CA' }
Se você quiser iterar sobre as propriedades do objeto address, pode aninhar outro loop for...in dentro do primeiro.
const person = {
name: 'John',
age: 30,
address: {
street: '123 Main St',
city: 'Anytown',
state: 'CA'
}
};
function isObject(obj) {
return typeof obj === 'object' && !Array.isArray(obj) && obj !== null;
}
for (const prop in person) {
if (isObject(person[prop])) {
for (const nestedProp in person[prop]) {
console.log(person[prop][nestedProp]);
}
} else {
console.log(person[prop]);
}
}
Neste exemplo, temos uma função personalizada isObject que verifica se o valor é um objeto.
O método Array.isArray é usado para verificar se o valor é um array. Ao colocar o operador lógico NOT (!) na frente do método, estamos verificando se o valor não é um array.
A razão pela qual não podemos simplesmente usar typeof igual a 'object' é porque arrays também são considerados objetos em JavaScript. Queremos excluir arrays da verificação.
Além disso, devido a um bug histórico no JavaScript, typeof null retorna 'object'. Então queremos também excluir valores null da verificação.
Se a condição for verdadeira, nós aninhamos outro loop for...in que irá percorrer as propriedades do objeto aninhado e registrar o valor no console.
A variável nestedProp representa a propriedade atual do objeto aninhado.
Aqui está como o resultado modificado aparecerá no console:
"John"
30
"123 Main St"
"Anytown"
"CA"
Um loop for...in é útil quando você precisa iterar sobre as propriedades de um objeto.
Não é recomendado usar um loop for...in para iterar sobre os elementos de um array. Em vez disso, use um loop for...of ou outros métodos de array como forEach, map, filter e reduce, que você aprenderá nas próximas lições.Este módulo não possui perguntas. Marque como concluído.