【问题标题】:get an object's property name using its value [duplicate]使用其值获取对象的属性名称[重复]
【发布时间】:2021-01-17 13:02:07
【问题描述】:

我有一个对象

const alpha = {
  a: 'apple'
  b: 'bubble'
}

目标是只使用值来获取属性名,比如我想用字符串apple来获取字符串形式的proberty名a。

【问题讨论】:

    标签: javascript object


    【解决方案1】:

    以下简单实现将在控制台中记录apple 的密钥。

    const alpha = {
      a: 'apple',
      b: 'bubble'
    }
    
    
    Object.entries(alpha).map(
            ([key, value]) => {
                if (value === 'apple'){
                    console.log(key);
                }
            }
        )
    

    【讨论】:

      【解决方案2】:

      我认为你想做这样的事情......

      const alpha = {
        a: 'apple',
        b: 'bubble'
      };
      
      const selectKeys = (object, selector) => {
        let results = [];
        
        if (object != null) {
          results = Object.entries(object)
            .filter((e) => selector(e[1], e[0], e))
            .map((e) => e[0]);
        }
        
        return results;
      };
      
      const keys = selectKeys(alpha, (value) => value === 'apple');
      console.log(keys);
      

      这只会选择选择器表达式返回 true 的所有键。对于您的情况,这只是名称。请注意,这会返回一个数组,因为可以返回多个键。要获得第一个密钥,只需使用keys[0] 或其他任何内容。

      您可以变得更花哨并添加更高阶的函数,以使您的选择器也更易于阅读。

      const byValue = (value) => (v) => v === value;
      const a = selectKeys(object, byValue('apple'));
      const a = selectKeys(object, byValue('bubble'));
      

      【讨论】:

        【解决方案3】:

        您将返回值与提供的值匹配的键列表。如果您想要第一个匹配项,只需将值从结果的开头移开即可。

        const alpha = {
          a: 'apple',
          b: 'bubble'
        };
        
        const keysForValue = (obj, value) =>
          Object.entries(obj)
            .filter(([, val]) => val === value)
            .map(([key]) => key);
            
        console.log('Key:', keysForValue(alpha, 'bubble').shift()); // Key: b
        .as-console-wrapper { top: 0; max-height: 100% !important; }

        【讨论】:

          【解决方案4】:

          试试下面的方法,

          const alpha = {
            a: 'apple',
            b: 'bubble',
            c: 'bubble',
            d: 'orange',
            e: 'bubble'
          }
          
          const findKeyByValue = (obj, value) => {
            const arr = [];
            for (const prop in obj) {
              if(obj[prop] === value){
                arr.push(prop);
              }
            }
          return arr;
          };
          
          
          findKeyByValue(alpha, 'bubble'); //[ 'b', 'c', 'e' ]
          

          【讨论】:

            猜你喜欢
            • 2017-05-21
            • 2021-08-27
            • 1970-01-01
            • 1970-01-01
            • 2012-12-27
            • 1970-01-01
            • 2013-01-02
            • 2019-11-27
            • 1970-01-01
            相关资源
            最近更新 更多