Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como filtrar apenas Strings

Boa noite! Estava escrevendo um código e me surgiu a dúvida de como filtro um objeto apenas por valores string. Segue o código:

const moto = { marca: "Yamaha", modelo: "YS Fazer", cilindrada: 249, pesoEmKg: 153, cv: 21, torqueEmKgfm: 2.1, capacidadeTanqueLitros: 19.2, marchas: 5, tempos: 4, cilintros: 1, ano: 2013, materialQuadro: "Aço", };

const apenasStrings = moto.filter(

);

console.log(apenasStrings);

2 respostas
solução!

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 :)

Muito obrigado pelo esclarecimento, Antônio!