匹配两个对象键并以角度4显示另一个对象键值

时间:2018-03-28 06:46:41

标签: javascript angular javascript-objects

我有两个像这样的对象

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,我不知道如何在角4中这样做。 这是我正在尝试的链接https://stackblitz.com/edit/angular-9k2nff?file=app%2Fapp.component.ts

4 个答案:

答案 0 :(得分:1)

使用数组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);
&#13;
&#13;
&#13;

编辑:

对于多个用户,它将是:

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

&#13;
&#13;
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);
    }
&#13;
&#13;
&#13;

答案 2 :(得分:0)

使用find

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

<强>演示

&#13;
&#13;
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);
&#13;
&#13;
&#13;

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

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

<强>演示

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

我认为这就是你需要的,输出只需运行代码片段:

&#13;
&#13;
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);
&#13;
&#13;
&#13;