Search code examples
javascripttypescriptloopbackjsloopback3

flattening nested objects typescript


I am looking to flatten a nested object in my controller (new to Loopback and Typescript)

Here is my model :

export class SampleModel {
  id: number;
  code: number;
  guide?: string;
  gradeData?: string;
}

Here is an example object :

{
  "id": 1,
  "code": 12345,
  "guide": "Guide for 2021",
  "gradeData": {
    "en": "Eng grade",
    "de": "Ger grade"
  }
}

Here is my controller:

// returns an array of SampleModel objects
@get('/guides')
async find(
@param.query.string('lang') lang: string,
@param.filter(SampleModel) filter?: Filter<SampleModel>
): Promise<SampleModel[]> {
return this.sampleModelRepository.find(filter); //this returns Promise<SampleModel[]>
}

I want to tweak this response a little based on lang. For ex: if lang = en I want the response to look like

[
  {
    "id": 1,
    "code": 12345,
    "guide": "Guide for 2021",
    "gradeData": "Eng grade"
  }
]

Solution

  • Something like this? Ofcource you need to make the langcode dynamic

    [{
      "id": 1,
      "code": 12345,
      "guide": "Guide for 2021",
      "gradeData": {
        "en": "Eng grade",
        "de": "Ger grade"
      }
    }].map(e=>{
        e.gradeData = e.gradeData["en"];
        return e;
    })
    

    Returned object:

    [
        {
            "id": 1,
            "code": 12345,
            "guide": "Guide for 2021",
            "gradeData": "Eng grade"
        }
    ]