【问题标题】:Match two object keys and display another object key value in angular 4匹配两个对象键并以角度 4 显示另一个对象键值
【发布时间】:2018-09-06 17:52:11
【问题描述】:

我有两个这样的对象

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

另一个是

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

我要做的是,将 iso_639_2_code 与用户的语言相匹配,然后我必须显示语言名称而不是语言中的代码。基本上两者都是不同的api,我不知道如何在angular 4中做到这一点。 这是我正在尝试的链接https://stackblitz.com/edit/angular-9k2nff?file=app%2Fapp.component.ts

【问题讨论】:

    标签: javascript angular javascript-objects


    【解决方案1】:

    使用find

    var output = languages.find(s => s.iso_639_2_code == user[0].language).name;
    

    演示

    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 output = languages.find(s => s.iso_639_2_code == user[0].language).name;
    
    console.log(output);

    或者,如果有多个用户,并且您想为每个用户查找语言名称,则使用map

    var output = user.map(t => 
       languages.find(s => 
          s.iso_639_2_code == t.language).name);
    

    演示

    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 output = user.map(t => 
       languages.find(s => 
          s.iso_639_2_code == t.language).name);
    
    console.log(output);

    【讨论】:

      【解决方案2】:

      使用数组查找:

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

      编辑:

      如果有多个用户,它将是:

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

      【讨论】:

        【解决方案3】:

        我认为这就是你需要的,输出只需运行 sn-p :

        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"
           }
        
        ];
        
        user.map(u => {
          let flang = languages.filter(lang => lang.iso_639_2_code === u.language);
          if(flang) {
            u.language = flang[0].name;
          }
          return u;
        })
        
        console.log(user);

        【讨论】:

          【解决方案4】:

          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 languageFound = languages.find(lang => lang.iso_639_2_code === user[0].language);
              if(languageFound){
                var languageName = languageFound.name;
                console.log(languageName);
              }

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-05-30
            • 1970-01-01
            • 1970-01-01
            • 2018-07-13
            • 1970-01-01
            • 2023-02-15
            • 2019-06-07
            • 1970-01-01
            相关资源
            最近更新 更多