Search code examples
javascriptangularjavascript-objects

Match two object keys and display another object key value in angular 4


i have two objects like this

languages = [
  {
    "name": "english",
    "iso_639_2_code": "eng"
  },
  {
    "name": "esperanto",
    "iso_639_2_code": "epo"
  },
  {
    "name": "estonian",
    "iso_639_2_code": "est"
  }
]

and another is

user = [
    { 
    name: "john",
    language: "eng",
    country: "US"
   }   
];

what i have to do is, match iso_639_2_code to language of user then, i have to display Language name not code from languages. basically both are different api, and i have no idea how to do it this in angular 4. here's a link what i am trying https://stackblitz.com/edit/angular-9k2nff?file=app%2Fapp.component.ts


Solution

  • Use array find:

    var languages = [
        {"name": "english", "iso_639_2_code": "eng"},
        {"name": "esperanto","iso_639_2_code": "epo"},
        {"name": "estonian","iso_639_2_code": "est"}
    ];
    var user = [{name: "john",language: "eng",country: "US"}];
    
    var language = languages.find(l => l.iso_639_2_code === user[0].language);
    var languageName = language && language.name; // <-- also prevent error when there is no corresponding language found
    console.log(languageName);

    EDIT:

    With multiple user, it will be:

    var languages = [
        {"name": "english", "iso_639_2_code": "eng"},
        {"name": "esperanto","iso_639_2_code": "epo"},
        {"name": "estonian","iso_639_2_code": "est"}
    ];
    var users = [
        {name: "john",language: "eng",country: "US"},
        {name: "john",language: "epo",country: "Esperanto"}
    ];
    
    var languageNames = languages.filter(
        l => users.find(u => l.iso_639_2_code === u.language)
    ).map(lang => lang.name);
    
    console.log(languageNames);