I’m using class transformer to change the shape of my response in my typescript nestjs application. This is my initial structure:
<code>[
{
"languages": [
{
"language_shortcode": "de",
"label": "ASP-Einrichtung"
},
{
"language_shortcode": "en",
"label": "Some text"
}
]
},
{
"languages": [
{
"language_shortcode": "de",
"label": "Deutschland"
},
{
"language_shortcode": "en",
"label": "USA"
}
]
}
]
</code>
<code>[
{
"languages": [
{
"language_shortcode": "de",
"label": "ASP-Einrichtung"
},
{
"language_shortcode": "en",
"label": "Some text"
}
]
},
{
"languages": [
{
"language_shortcode": "de",
"label": "Deutschland"
},
{
"language_shortcode": "en",
"label": "USA"
}
]
}
]
</code>
[
{
"languages": [
{
"language_shortcode": "de",
"label": "ASP-Einrichtung"
},
{
"language_shortcode": "en",
"label": "Some text"
}
]
},
{
"languages": [
{
"language_shortcode": "de",
"label": "Deutschland"
},
{
"language_shortcode": "en",
"label": "USA"
}
]
}
]
I want to only return German flags, where language_shortcode
is de
.
This is what I did:
<code>const serialized = plainToInstance(CategoryResponseDto, entries, {
excludeExtraneousValues: true,
});
</code>
<code>const serialized = plainToInstance(CategoryResponseDto, entries, {
excludeExtraneousValues: true,
});
</code>
const serialized = plainToInstance(CategoryResponseDto, entries, {
excludeExtraneousValues: true,
});
This is my dto:
<code>export class CategoryResponseDto {
@Expose()
@Transform(
({ value }) => {
const de_lang = value.find((lang) => lang.language_shortcode === 'de');
return de_lang.label;
},
{ toPlainOnly: true },
)
languages: Language[];
constructor(partial: Partial<CategoryResponseDto[]>) {
Object.assign(this, partial);
}
}
</code>
<code>export class CategoryResponseDto {
@Expose()
@Transform(
({ value }) => {
const de_lang = value.find((lang) => lang.language_shortcode === 'de');
return de_lang.label;
},
{ toPlainOnly: true },
)
languages: Language[];
constructor(partial: Partial<CategoryResponseDto[]>) {
Object.assign(this, partial);
}
}
</code>
export class CategoryResponseDto {
@Expose()
@Transform(
({ value }) => {
const de_lang = value.find((lang) => lang.language_shortcode === 'de');
return de_lang.label;
},
{ toPlainOnly: true },
)
languages: Language[];
constructor(partial: Partial<CategoryResponseDto[]>) {
Object.assign(this, partial);
}
}
I get such a thing:
<code>[
{
"languages": "ASP-Einrichtung"
},
{
"languages": "Deutschland"
}
]
</code>
<code>[
{
"languages": "ASP-Einrichtung"
},
{
"languages": "Deutschland"
}
]
</code>
[
{
"languages": "ASP-Einrichtung"
},
{
"languages": "Deutschland"
}
]
I don’t want to repeat useless languages
objects. How can I achieve that?