根据值获取对象键对值

时间:2021-05-03 13:24:27

标签: javascript arrays object key key-value

我有以下对象:

{{1}}

我的代码将始终将 abbr 存储在一个变量中,这可以根据用户选择进行更改。我想要实现的是,如果我知道 abbr,即如果我知道 abbr 等于 abbr3,我想要得到 somestring3。

3 个答案:

答案 0 :(得分:0)

你不能这样做,在对象内部有相同的键,覆盖前一个

const object1 = {
    language: 'some_string1', abbr: 'abbr1',
    language: 'some_string2', abbr: 'abbr2',
    language: 'some_string3', abbr: 'abbr3',
    language: 'some_string4', abbr: 'abbr4',
  };

for(key in object1) {
    console.log(key, object1[key]);
}

我建议你使用嵌套对象

const object1 = {
  observation1: { language: "some_string1", abbr: "abbr1" },
  observation2: { language: "some_string2", abbr: "abbr2" },
  observation3: { language: "some_string3", abbr: "abbr3" },
  observation4: { language: "some_string4", abbr: "abbr4" },
};

for (named_observation in object1) {
  observation = object1[named_observation];
  for (key in observation) {
    console.log(named_observation, key, observation[key]);
  }
}

答案 1 :(得分:0)

如果您有一个同时包含 languageabbr 的对象数组,您可以使用 Array.find

const arr = [
    {language: 'somestring1', abbr: 'abbr1'},
    {language: 'somestring2', abbr: 'abbr2'}, 
    {language: 'somestring3', abbr: 'abbr3'},
    {language: 'somestring4', abbr: 'abbr4'}
];
const knownAbbr = 'abbr3';
const correspondingLang = arr.find(obj => obj.abbr === knownAbbr)?.language;
console.log(correspondingLang);

答案 2 :(得分:0)

首先,我假设你有一个对象数组,因为 JS 对象不能保存同一个键的多个属性。我建议使用一组对象。在这种情况下,解决方案将是这样的:

const object1 = [
  { language: 'somestring1', abbr: 'abbr1' },
  { language: 'somestring2', abbr: 'abbr2' },
  { language: 'somestring3', abbr: 'abbr3' },
  { language: 'somestring4', abbr: 'abbr4' },
]

function getLangByAbbr (langList, abbr) {
  const lang = langList.find(lang => lang.abbr === abbr)
  return lang?.language
}

console.log(getLangByAbbr(object1, 'abbr2')) // 'somestring2'
console.log(getLangByAbbr(object1, 'abbr4')) // 'somestring4'
console.log(getLangByAbbr(object1, 'abbr9')) // undefined