6.7 KiB
title, description, published, date, tags, editor, dateCreated
| title | description | published | date | tags | editor | dateCreated |
|---|---|---|---|---|---|---|
| Explicação | true | 2026-07-20T17:50:25.085Z | markdown | 2026-06-22T19:40:46.381Z |
Explicacao Didatica do Trecho chartData
Trecho analisado
const chartData = this._dashboardDataset
.filter(item => item.Type === 'MATERIAL_STATUS')
.map((item) => ({
...item,
DisplayStatus: ColorMaterialFormatter.colorMaterialSubtitle(item.Key2)
}));
asdasd
Objetivo geral do codigo
Esse trecho pega uma lista maior de dados chamada this._dashboardDataset, seleciona apenas os itens que representam status de material e cria uma nova lista com esses itens, adicionando um campo novo chamado DisplayStatus.
Em outras palavras:
- Filtra somente os itens importantes para esse caso.
- Monta um novo array com os mesmos dados do item original.
- Acrescenta uma informacao formatada para exibicao.
Explicacao linha por linha
1. Declaracao da constante
const chartData = ...
constcria uma constante.chartDatasera a variavel que vai guardar o resultado final.- Esse resultado sera um novo array.
2. Uso de this._dashboardDataset
this._dashboardDataset
thisnormalmente representa o objeto atual, por exemplo um controller ou classe._dashboardDatasetparece ser uma propriedade desse objeto.- O nome indica que ela armazena os dados usados no dashboard.
Entao o codigo esta comecando a trabalhar sobre esse array principal.
3. A funcao filter
.filter(item => item.Type === 'MATERIAL_STATUS')
O que filter faz
A funcao filter() percorre todos os itens de um array e retorna um novo array contendo apenas os itens que passam em uma condicao.
Como funciona aqui
Para cada item do array:
item.Type === 'MATERIAL_STATUS'
Essa expressao verifica se a propriedade Type do item e exatamente igual a 'MATERIAL_STATUS'.
Resultado do filter
- Se for verdadeiro, o item permanece no array novo.
- Se for falso, o item e descartado.
Exemplo
Se o array original for:
[
{ Type: 'MATERIAL_STATUS', Key2: 'A' },
{ Type: 'OTHER', Key2: 'B' },
{ Type: 'MATERIAL_STATUS', Key2: 'C' }
]
Depois do filter, o resultado sera:
[
{ Type: 'MATERIAL_STATUS', Key2: 'A' },
{ Type: 'MATERIAL_STATUS', Key2: 'C' }
]
4. A arrow function usada no filter
item => item.Type === 'MATERIAL_STATUS'
Essa e uma arrow function, que e uma forma curta de escrever funcao em JavaScript.
Ela equivale a algo assim:
function(item) {
return item.Type === 'MATERIAL_STATUS';
}
Ou seja, para cada item, ela retorna true ou false.
5. A funcao map
.map((item) => ({
...item,
DisplayStatus: ColorMaterialFormatter.colorMaterialSubtitle(item.Key2)
}));
O que map faz
A funcao map() percorre um array e transforma cada item em outro valor.
No final, ela devolve um novo array com a mesma quantidade de itens, mas cada item pode ter sido modificado ou recriado.
Como funciona aqui
Depois do filter, o map() pega cada item que sobrou e cria um novo objeto com:
- todos os campos do item original
- mais um campo novo chamado
DisplayStatus
6. O que significa ...item
...item
Isso e o spread operator.
Nesse contexto, ele copia as propriedades do objeto item para dentro do novo objeto.
Exemplo:
Se item for:
{
Type: 'MATERIAL_STATUS',
Key1: 'MAT1',
Key2: 'RED'
}
Entao:
{
...item
}
vira algo equivalente a:
{
Type: 'MATERIAL_STATUS',
Key1: 'MAT1',
Key2: 'RED'
}
Isso e muito util para reaproveitar os dados existentes sem precisar escrever propriedade por propriedade.
7. Criacao do campo DisplayStatus
DisplayStatus: ColorMaterialFormatter.colorMaterialSubtitle(item.Key2)
Aqui o codigo cria uma nova propriedade chamada DisplayStatus.
O valor dela vem da chamada:
ColorMaterialFormatter.colorMaterialSubtitle(item.Key2)
O que isso faz
ColorMaterialFormatterparece ser um objeto utilitario de formatacao.colorMaterialSubtitle(...)parece ser uma funcao desse objeto.item.Key2e o valor enviado para essa funcao.
Provavelmente essa funcao pega um codigo interno e devolve um texto melhor para exibicao.
Exemplo possivel
Se:
item.Key2 = 'RED'
e a funcao retornar:
'Vermelho'
o novo objeto passara a ter:
DisplayStatus: 'Vermelho'
8. Por que ha parenteses em volta do objeto no map
(item) => ({
...item,
DisplayStatus: ...
})
Esses parenteses extras existem porque a arrow function esta retornando um objeto diretamente.
Sem esses parenteses, o JavaScript poderia interpretar as chaves como bloco de codigo, e nao como objeto.
9. Resultado final de chartData
No final, chartData sera um novo array contendo:
- apenas itens com
Type === 'MATERIAL_STATUS' - todos os campos originais desses itens
- mais o campo
DisplayStatus
Exemplo completo
Array original
this._dashboardDataset = [
{ Type: 'MATERIAL_STATUS', Key1: 'MAT1', Key2: 'RED' },
{ Type: 'OTHER', Key1: 'X', Key2: 'Y' },
{ Type: 'MATERIAL_STATUS', Key1: 'MAT2', Key2: 'GREEN' }
];
Supondo que:
ColorMaterialFormatter.colorMaterialSubtitle('RED') // 'Vermelho'
ColorMaterialFormatter.colorMaterialSubtitle('GREEN') // 'Verde'
Resultado em chartData
[
{
Type: 'MATERIAL_STATUS',
Key1: 'MAT1',
Key2: 'RED',
DisplayStatus: 'Vermelho'
},
{
Type: 'MATERIAL_STATUS',
Key1: 'MAT2',
Key2: 'GREEN',
DisplayStatus: 'Verde'
}
]
Diferenca importante em relacao ao forEach
Nesse caso, o codigo usa map(), que cria um novo array com novos objetos.
Isso e diferente de um forEach() alterando diretamente os objetos originais.
Vantagem disso
- o codigo fica mais declarativo
- evita alterar a lista original sem necessidade
- facilita manutencao e leitura
Resumo simples
Esse trecho:
- pega os dados do dashboard
- filtra apenas os itens do tipo
MATERIAL_STATUS - cria uma nova versao de cada item
- adiciona o campo
DisplayStatuscom um valor formatado para exibicao
Conclusao
Para um dev junior, a ideia principal e lembrar:
filter()serve para selecionarmap()serve para transformar...itemserve para copiar as propriedades do objetoColorMaterialFormatter.colorMaterialSubtitle(item.Key2)serve para formatar um valor para exibicao
Esse e um padrao muito comum em JavaScript moderno quando trabalhamos com listas de dados.