Oi, Marcio, tudo bem?
Como moto
é um objeto, ele não tem disponível o método filter
, que é disponível apenas para arrays.
Então para filtrar as propriedades, nós podemos utilizar a estrutura de repetição for... in
para percorrer o objeto ou o método Object.values()
do JavaScript para obter diretamente os valores das propriedades do objeto. Vou te mostrar as duas formas:
1. for... in
Semelhante a um dos vídeos do curso que o instrutor percorre um objeto com o for... in
, nós vamos verificar se o tipo do valor de cada propriedade do objeto é igual a "string"
. O código fica assim:
const apenasStrings = [];
for (let chave in moto) {
if (typeof moto[chave] === 'string') {
apenasStrings.push(moto[chave]);
}
}
console.log(apenasStrings); // ['Yamaha', 'YS Fazer', 'Aço']
2. Object.values()
Diferente do método Object.keys()
, que retorna uma lista com as chaves de um objeto, o método Object.values()
retorna uma lista com os valores das propriedades do objeto. E, na lista retornada, podemos aplicar o método filter
de arrays do JavaScript. O código fica assim:
const apenasStrings = Object.values(moto).filter((valor) => {
return typeof valor === 'string';
});
console.log(apenasStrings); // ['Yamaha', 'YS Fazer', 'Aço']
Essa forma é mais simples, não é? Por isso é mais comum iterarmos objetos com métodos como Object.keys(), Object.values() ou até Object.entries() (que retorna as chaves e valores das propriedades ao mesmo tempo).
Apesar disso, existem casos em que a estrutura for... in
pode realizar operações mais complexas que os métodos acima não conseguem. Isso é semelhante aos arrays possuírem métodos que facilitam realizar iterações, mas a estrutura for
consegue realizar operações mais complexas de iteração em arrays.
Espero ter ajudado! Abraços e bons estudos :)