【问题标题】:Get object key pair value based on a value根据值获取对象键对值
【发布时间】:2021-07-25 21:51:59
【问题描述】:

我有以下对象:

const object1 = {
  language: 'somestring', abbr: 'abbr1',
  language: 'somestring2', abbr: 'abbr2',
  language: 'somestring3', abbr: 'abbr3',
  language: 'somestring4', abbr: 'abbr4',

};

我的代码将始终将缩写存储在变量中,并且可以根据用户选择进行更改。我想要实现的是如果我知道 abbr 则获得相应的语言,即如果我知道 abbr 等于 abbr3 我想获得 somestring3。

【问题讨论】:

  • 只设置了最后一个相同的键。您需要一个数组在数据结构中拥有多个相同的键。

标签: javascript arrays object key key-value


【解决方案1】:

首先,我假设你有一个对象数组,因为 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

【讨论】:

    【解决方案2】:

    如果您有一个对象数组同时具有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);

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-03
        • 2021-08-25
        • 1970-01-01
        • 1970-01-01
        • 2021-10-24
        • 1970-01-01
        相关资源
        最近更新 更多