使用其值获取对象的属性名称[重复]

Posted

技术标签:

【中文标题】使用其值获取对象的属性名称[重复]【英文标题】: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。

【问题讨论】:

【参考方案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' ]

【讨论】:

以上是关于使用其值获取对象的属性名称[重复]的主要内容,如果未能解决你的问题,请参考以下文章

json 按名称查找对象并获取其值(api)[关闭]

对象不支持属性或方法“值”[重复]

通过字符串名称设置/获取类属性[重复]

使用id名称和name直接获取元素

您如何使用 Selenium 检查属性的存在并获取其值(如果存在)?

有没有办法使用属性值/是获取 JavaScript 对象属性名称? [复制]